html 如何在单击图像框时使用Javascript打开模态,并在框外单击时关闭模态?

46qrfjad  于 2022-12-09  发布在  Java
关注(0)|答案(2)|浏览(152)

我已经创建了一个与Javascript模态。现在当我点击图像模态打开,当我点击交叉按钮它关闭。我想要的是,而不是图片,当用户点击图像框,而不是具体的图像,模态应该打开,当用户点击模态框外的任何地方,它应该关闭,而不仅仅是交叉按钮。
HTML:

<section id="about-intro">
        <div class="container-fluid">
            <div class="row justify-content-center">
                     <div class="col-sm-12 col-lg-11 about-start">



                                <div class="about-content">
                                <div class="about-box">
                                <div class="upp-title">
                                 <div class="upp-headshot">
 <picture> <img src="image" 
  href="#myModal1" class="rounded-circle" alt="Responsive image"/> </picture>
                                        </div>
                                        <div class="upp-info">
                                            <h3><span class="about-name">abc</span> 
 </h3>
                                            <p><span class="about-des">xyz</span></p>
                                        </div>
                                    </div>
                                         <!-- The Modal -->
 <div id="myModal1" class="modal">
  <!-- Modal content -->
 <div class="modal-content">
 <div class="modal-header">
  <span class="close">×</span>
  
 </div>
 <div class="modal-body">
 <div class="row">
    <div class="col-md-12" style="text-align: center;">
      <img src="" class="img- 
  fluid" alt="Responsive image">
    </div>

    <div class="col-md-12" style="text-align: center;">
      <h1 class="modalh1">abc</h1>
      <h3 class="modalh3">xyz</h3>
      <p class="modalp">qwertyuicffvgbhnmghj</p>
    </div>
  </div>
 </div>
 <div class="modal-footer">
 
 </div>
 </div>
</div>                                
 </div>
</div>
 </div>
</div>
</div>
</section>

脚本:

<script>
  // Get the button that opens the modal
 var img = document.querySelectorAll("img.rounded-circle");

 // All page modals
 var modals = document.querySelectorAll('.modal');

 // Get the <span> element that closes the modal
 var spans = document.getElementsByClassName("close");

 // When the user clicks the button, open the modal
 for (var i = 0; i < img.length; i++) {
 img[i].onclick = function(e) {
 e.preventDefault();
 modal = document.querySelector(e.target.getAttribute("href"));
 modal.style.display = "contents";
 }
 }

 // When the user clicks on <span> (x), close the modal
 for (var i = 0; i < spans.length; i++) {
 spans[i].onclick = function() {
 for (var index in modals) {
  if (typeof modals[index].style !== 'undefined') modals[index].style.display = "none";    
  }
  }
  }

 // When the user clicks anywhere outside of the modal, close it
 window.onclick = function(event) {
 if (event.target.classList.contains('modal')) {
 for (var index in modals) {
  if (typeof modals[index].style !== 'undefined') modals[index].style.display = "none";    
 }
 }
 }
 </script>
tcomlyy6

tcomlyy61#

Hope it helps.
I always use flex display so I can click the external content.
I tried to insert it to your code
Change style of .modal

<div
  id="myModal1"
  class="modal"
  style="
    display: none;
    width: 100vw;
    height: 100vh;
    justify-content: center;
    align-items: center;
    position: fixed;
    top: 0px;
    left: 0px;
  ">

then in js, instead of window.onclick

for (var i = 0; i < modals.length; i++) {
  modals[i].onclick = function (event) {
    if (!event.target.closest('.modal-content')) {
      for (var index in modals) {
        if (typeof modals[index].style !== 'undefined')
          modals[index].style.display = 'none';
      }
    }
  };
}

You can change selector to .upp-title or .upp-headshot for a bigger clickable area.

o2gm4chl

o2gm4chl2#

我希望你可以使用这个方法来你的代码!看看这个
第一个

相关问题