4

複数のモーダル ポップアップをサポートする半不透明なオーバーレイをページに追加しようとしています。

3 つのポップアップ ボックスは、Javascript を必要とせずに問題なく開き、Javascript の助けを借りて、ポップアップの外側をマウスでクリックすると閉じます。残念ながら、「モーダルを開く」ボタンをブロックしないと、オーバーレイを機能させることができません。「オーバーレイ」div 全体をすべてのポップアップ ボックスにラップしようとしましたが、ポップアップをオーバーレイ div の外に置いてみました。

ボタンへのアクセスをブロックせずに、また Javascript によって促進される「外部クローズ」機能を台無しにすることなく、これを修正する方法はありますか? 「.index.html」、「style.css」、「modal-script.js」の 3 つのファイルが添付されています。私の用語が時々「手抜き」である場合は申し訳ありませんが、私はできる限り最善を尽くしているだけです。

これまでの私のコードは、この同じドキュメントの下にあります。何か提案があればよろしくお願いします。


HTML コード: ~ メイン ドキュメント


CSS (スタイルシート): ~ モーダル環境


JAVASCRIPT: ~ ポップアップ ボックスの外部クローズ


// JAVASCRIPT FILE: js/modal-script.js
// Closes multi-modals in an HTML page

// SET VARIABLES:
var boxArray = ['box1','box2','box3'];
// LISTEN FOR WINDOW EVENT
window.addEventListener('mouseup', function(event){
  // LOOP...
  for(var i = 0; i < boxArray.length; i++) { 
    var box = document.getElementById(boxArray[i]); 
    // IF...
    if(event.target != box && event.target.parentNode != box){ 
      // THEN...
      box.style.display = 'none';
    }  // END IF/THEN STATEMENT
  }  // END LOOP
});  // END EVENT
/* STYLESHEET FOR MODAL ENVIRONMENT */

/* Pesets */
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

a:link, a:visited {
  text-decoration: none;
}

p {
  margin-top: 0;
}

body {
  font-family: 'Halvetica', Arial, sans-serif; /* Default font family */
}

/* MODAL ENVIRONMENT */
.modal { /* Format the 'modal-window', which is the modal environment background containing the 'modal-box(es)' */
  background: rgba(0, 0, 0, 0.8);
  position: absolute;
  width: 100%;
  height: 100vh;
  top: 0;
  left: 0;
  z-index: 10;
  display: none;
}

.modal-content { /* Framework and default settings for popup boxes */
  position: absolute;
  background: #e2e2e2;
  width: 80%;
  height: 60%;
  top: 50%;
  left: 50%;
  padding: 20px;
  transform: translate(-50%, -50%);
  border-radius: 1em;
  display: none;
}

.modal:target { /* Where '.modal' is the target, make it visible */
  display: block;
}

.modal:target .modal-content { /* Where 'modal-content' inside of 'modal' is the target, make both visible */
  display: block;
}

/* MY POPUP BOXES */
#box1 {
  
}

#box2 {
  
}

#box3 {
  
}

/* Formatting: */
.button {
  width: 250px;
  height: 30px;
}

.type_1-button {
  width: 250px;
  height: 30px;
  font-size: 0.9em;
  font-weight: normal;
  color: #000;
  margin: 20px;
}

.type_1-button:hover {
  background: dodgerblue;
  font-size: 1em;
  font-weight: bold;
  color: #fff;
}
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>Multi-modal</title>
    <script src="modal-script.js" type="text/javascript"></script>
    <link rel="stylesheet" type="text/css" href="style.css" />
  </head>
  <body>
    <!--Button controls to trigger pop-up boxes-->
    <button onclick="document.getElementById('box1').style.display = 'block'" class="type_1-button">Open Box 1</button>
    <button onclick="document.getElementById('box2').style.display = 'block'" class="type_1-button">Open Box 2</button>
    <button onclick="document.getElementById('box3').style.display = 'block'" class="type_1-button">Open Box 3</button>
    <!--MODAL CODE-->
    <div id="overlay" class="modal"> <!--Create modal window/environment/background-->
      <!--PROBLEM HERE... WHAT TO DO???-->
    </div> <!--End 'overlay' div and 'modal' class-->
    <!--myBoxes: box1-->
    <div id="box1" class="modal-content"> 
      <h2>Pop-out Interface - Box1</h2> 
    </div> <!--End 'box1'-->
    <!--myBoxes: box2-->
    <div id="box2" class="modal-content"> 
      <h2>Pop-out Interface - Box2</h2>
    </div> <!--End 'box2'-->
    <!--myBoxes: box3-->
    <div id="box3" class="modal-content"> 
      <h2>Pop-out Interface - Box3</h2>
    </div> <!--End 'box3'-->
    <!--END MODAL CODE-->
  </body>
</html>

4

3 に答える 3