简体   繁体   English

纯 JavaScript 模态图像的问题

[英]Problem with pure JavaScript Modal images

I have a problem with modal popup images.我对模态弹出图像有疑问。 I have a list of images and tried to use this code (with some changes): https://www.w3schools.com/howto/tryit.asp?filename=tryhow_css_modal_img But it works only for the first message.我有一个图像列表并尝试使用此代码(有一些更改): https://www.w3schools.com/howto/tryit.asp?filename=tryhow_css_modal_img但它仅适用于第一条消息。 How can I make it work for all messages from the gallery?如何使它适用于画廊中的所有消息?

<div>
           <div class="portfolio-overlay">
                <img src="img/portfolio/Transeco-small.jpg">
                <div class="portfolio-image-overlay image-overlay-content">
                    <div class="portfolio-icons">
                         <i class="icon-zoom-in open-big"><img src="img/portfolio/Transeco-big.jpg" class="img-closed"></i>                          
                        <a href="http://www.google.com" target="_blank"><i class="icon-link"></i></a>
                    </div>
                </div>
            </div>
        </div>
        <div>
           <div class="portfolio-overlay">
                <img src="img/portfolio/Transeco-small.jpg">
                <div class="portfolio-image-overlay image-overlay-content">
                    <div class="portfolio-icons">
                         <i class="icon-zoom-in open-big"><img src="img/portfolio/Transeco-big.jpg" class="img-closed"></i>                          
                        <a href="http://www.google.com" target="_blank"><i class="icon-link"></i></a>
                    </div>
                </div>
            </div>
        </div>
        <div>
           <div class="portfolio-overlay">
                <img src="img/portfolio/Transeco-small.jpg">
                <div class="portfolio-image-overlay image-overlay-content">
                    <div class="portfolio-icons">
                         <i class="icon-zoom-in open-big"><img src="img/portfolio/Transeco-big.jpg" class="img-closed"></i>                          
                        <a href="http://www.google.com" target="_blank"><i class="icon-link"></i></a>
                    </div>
                </div>
            </div>
        </div>
<!-- The Modal -->
        <div class="modal myModal">
          <span class="close">&times;</span>
          <img class="modal-content img01">
        </div>


// Get the modal
var modal = document.querySelector(".myModal");

// Get the image and insert it inside the modal - use its "alt" text as a caption
var img = document.querySelector('.open-big');
var modalImg = document.querySelector(".img01");
var probaa = document.querySelector('.open-big img');
img.onclick = function(){
  modal.style.display = "block";
  modalImg.src = probaa.src;
}

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

// When the user clicks on <span> (x), close the modal
span.onclick = function() { 
  modal.style.display = "none";
}

There are no errors in console, but it works only on firs image...控制台中没有错误,但它仅适用于第一张图像......

var img = document.querySelector('.open-big');

document.querySelector only selects a single element, in this case the first element with the class open-big document.querySelector只选择一个元素,在这种情况下,第一个元素带有 class open-big

in order to select all elements you must use document.querySelectorAll为了 select 所有元素,您必须使用document.querySelectorAll

then you can iterate over that set an add event listeners to each one:然后您可以遍历该设置,为每个添加事件侦听器:

var imgs = document.querySelectorAll('.open-big');

for (i = 0; i < imgs.length; ++i) {
  imgs[i].onclick = function(){
    modal.style.display = "block";
    modalImg.src = probaa.src;
  }
}

you CANNOT use normal array methods on a node collection though.但是,您不能在节点集合上使用普通数组方法。 so, imgs.forEach will not work.所以, imgs.forEach将不起作用。 There is a somewhere complicated workaround though:不过,有一个复杂的解决方法:

[].forEach.call(imgs, function(img) {
  // do whatever
});

There is more information at this link on css tricks. 此链接上有更多关于 css 技巧的信息。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM