LoginSignup
3
0

モーダルウィンドウについて

Posted at

モーダルウィンドウが表示されているときに元のウィンドウを暗くするには、モーダルウィンドウを表示するときに背景にオーバーレイを追加する方法があります。これにより、モーダルウィンドウがアクティブな状態であり、背後のコンテンツが見えにくくなります。

以下に具体的な手順を示します:

  1. CSSでオーバーレイを作成します。これは、背景全体を覆い、暗くするための半透明の要素です。以下は、オーバーレイのスタイルを定義する例です。
.overlay {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-color: rgba(0, 0, 0, 0.6); /* 半透明の黒色 */
  z-index: 9999; /* モーダルウィンドウよりも前面に表示 */
}
  1. モーダルウィンドウを表示する際に、オーバーレイを作成し、HTMLの最上位要素に追加します。具体的には、以下のような手順を追加します。
  • モーダルウィンドウ表示用のボタンやリンクにイベントハンドラを追加します。
  • クリックイベントが発生したときに、オーバーレイ要素を作成し、HTMLの最上位要素に追加します。
  • モーダルウィンドウも表示します。
var modal = document.getElementById("modal");
var modalButton = document.getElementById("modalButton");
var close = document.getElementsByClassName("close")[0];
var overlay = document.createElement("div");
overlay.classList.add("overlay");

modalButton.onclick = function() {
  document.body.appendChild(overlay); // オーバーレイを追加
  modal.style.display = "block";
}

close.onclick = function() {
  document.body.removeChild(overlay); // オーバーレイを削除
  modal.style.display = "none";
}

window.onclick = function(event) {
  if (event.target == overlay) { // オーバーレイをクリックしたら閉じる
    document.body.removeChild(overlay);
    modal.style.display = "none";
  }
}


この方法によりモーダルウィンドウが表示されている間背景全体が暗くなりモーダルウィンドウが注目されるようになります











HTMLとCSSを使用したカスタムモーダルウィンドウの具体的な実装方法を説明します

1. HTMLの作成:
   - モーダルウィンドウを開くためのボタンやリンクを作成します例えば以下のようなHTMLを使用します

```html
<button id="modalButton">モーダルを開く</button>
  • モーダルウィンドウのコンテンツとなる要素を作成します。通常、モーダルウィンドウのコンテンツは別の<div>要素内に配置されます。例えば、以下のようにします。
<div id="modal" class="modal">
  <div class="modal-content">
    <span class="close">&times;</span>
    <h2>モーダルウィンドウのタイトル</h2>
    <p>モーダルウィンドウの内容...</p>
  </div>
</div>
  1. CSSの作成:
    • モーダルウィンドウの外観とスタイルを定義するCSSを作成します。例えば、以下のようなCSSを使用します。
.modal {
  display: none; /* 最初は非表示 */
  position: fixed;
  z-index: 1;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
  overflow: auto;
  background-color: rgba(0, 0, 0, 0.4);
}

.modal-content {
  background-color: #fefefe;
  margin: 10% auto;
  padding: 20px;
  border: 1px solid #888;
  width: 80%;
}

.close {
  color: #aaa;
  float: right;
  font-size: 28px;
  font-weight: bold;
  cursor: pointer;
}

.close:hover,
.close:focus {
  color: black;
  text-decoration: none;
  cursor: pointer;
}
  1. JavaScriptの追加:
    • モーダルウィンドウの表示と非表示を制御するためのJavaScriptコードを追加します。以下は、ボタンをクリックしたときにモーダルウィンドウを表示する例です。
var modal = document.getElementById("modal");
var modalButton = document.getElementById("modalButton");
var close = document.getElementsByClassName("close")[0];

// モーダルウィンドウを表示する
modalButton.onclick = function() {
  modal.style.display = "block";
}

// モーダルウィンドウを閉じる
close.onclick = function() {
  modal.style.display = "none";
}

// モーダルウィンドウの外側をクリックしたら閉じる
window.onclick = function(event) {
  if (event.target == modal) {
    modal.style.display = "none";
  }
}

上記のJavaScriptコードは、ボタンをクリックしたときにモーダルウィンドウを表示し、閉じるボタンやモ

了解しました。以下に、親ウィンドウと子ウィンドウのスクリプトを配列データのやり取りに修正した例を示します。

親ウィンドウのスクリプト:

// モーダルウィンドウを開く関数
function openModalWindow() {
  var childWindow = window.open('modal.html', 'Modal Window', 'width=500,height=400');
}

// 配列データを受け取る関数
function receiveArrayData(data) {
  // 受け取った配列データを処理するなどの操作を行う
  console.log(data);
}

// メッセージイベントのリスナーを設定
window.addEventListener('message', function(event) {
  var dataArray = event.data; // 子ウィンドウからの配列データ
  receiveArrayData(dataArray);
});

子ウィンドウのスクリプト:

// 親ウィンドウに配列データを送信する関数
function sendArrayDataToParent() {
  var dataArray = [1, 2, 3, 4, 5]; // 子ウィンドウでの処理やデータの取得
  window.opener.postMessage(dataArray, '*'); // 配列データを親ウィンドウに送信
}

// ページが閉じられる際のイベントリスナーを設定
window.onbeforeunload = function() {
  sendArrayDataToParent(); // モーダルウィンドウが閉じられたことを通知
}

上記の例では、親ウィンドウ側で"openModalWindow"関数を呼び出すことで子ウィンドウが開かれます。また、親ウィンドウ側で"receiveArrayData"関数をメッセージイベントのリスナーとして登録し、子ウィンドウからの配列データを受け取ります。

子ウィンドウ側では、"sendArrayDataToParent"関数を呼び出すことで親ウィンドウに配列データを送信します。また、子ウィンドウが閉じられる際には、"onbeforeunload"イベントを使用して親ウィンドウにモーダルウィンドウの閉じられたことを通知します。

このようにすることで、親ウィンドウと子ウィンドウ間で配列データをやり取りすることができます。ご希望の修正内容になっているか確認してください。

以下に、親ウィンドウと子ウィンドウのスクリプトを明確に分けて記述した例を示します。

親ウィンドウのスクリプト:

// モーダルウィンドウを開く関数
function openModalWindow() {
  var childWindow = window.open('modal.html', 'Modal Window', 'width=500,height=400');
}

// メッセージを受け取る関数
function receiveMessage(event) {
  var data = event.data; // 子ウィンドウからのデータ
  // データを処理するなどの操作を行う
}

// メッセージイベントのリスナーを設定
window.addEventListener('message', receiveMessage);

子ウィンドウのスクリプト:

// 親ウィンドウにメッセージを送信する関数
function sendMessageToParent() {
  var data = 'データを受け取る'; // 子ウィンドウでの処理やデータの取得
  window.opener.postMessage(data, '*'); // データを親ウィンドウに送信
}

// ページが閉じられる際のイベントリスナーを設定
window.onbeforeunload = function() {
  sendMessageToParent(); // モーダルウィンドウが閉じられたことを通知
}

上記の例では、親ウィンドウ側で"openModalWindow"関数を呼び出すことで子ウィンドウが開かれます。また、親ウィンドウ側で"receiveMessage"関数をメッセージイベントのリスナーとして登録し、子ウィンドウからのデータを受け取ることができます。

子ウィンドウ側では、"sendMessageToParent"関数を呼び出すことで親ウィンドウにデータを送信します。また、子ウィンドウが閉じられる際には、"onbeforeunload"イベントを使用して親ウィンドウにモーダルウィンドウの閉じられたことを通知します。

このようにスクリプトを明確に分けることで、親ウィンドウと子ウィンドウの役割と処理が明確になり、互いの間でのデータの受け渡しなどが容易になります。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0