简体   繁体   English

单击时展开的并排Gif

[英]Side-By-Side Gifs That Expand When Clicked

First off, I am new to coding. 首先,我是编码的新手。 I am trying to put two gifs side by side that when clicked on expand into a pop up window and the videos are enlarged. 我试图将两个gif并排放置,当单击它们时,它们会展开成一个弹出窗口,并且视频会放大。 I have succeeded in getting the images side by side. 我已经成功地将图像并排放置。 The first gif expands when clicked on and acts how I want it to. 单击时第一个gif会展开,并按照我希望的方式运行。 But the second gif does not. 但是第二个gif没有。 I believe it has to do with the 's both being the same, but I am not sure how to go about using a class or multiple ids to make the modal work correctly. 我相信这与两者相同有关,但是我不确定如何使用一个类或多个ID来使模式正确工作。 Some help would be much appreciated! 一些帮助将不胜感激! Attached is my code. 附件是我的代码。

 // Get the modal var modal = document.getElementById('myModal'); // Get the image and insert it inside the modal - use its "alt" text as a caption var img = document.getElementById("myImg"); var modalImg = document.getElementById("img01"); var captionText = document.getElementById("caption"); img.onclick = function() { modal.style.display = "block"; modalImg.src = this.src; captionText.innerHTML = this.alt; } // 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"; } 
 .column { float: left; width: 50%; padding: 5px; } /* Clearfix (clear floats) */ .row::after { content: ""; clear: both; display: table; } /*Image Loops*/ #myImg { border-radius: 5px; cursor: pointer; transition: 0.3s; } #myImg:hover { opacity: 0.7; } /* The Modal (background) */ .modal { display: none; /* Hidden by default */ position: fixed; /* Stay in place */ z-index: 1; /* Sit on top */ padding-top: 100px; /* Location of the box */ left: 0; top: 0; width: 100%; /* Full width */ height: 100%; /* Full height */ overflow: auto; /* Enable scroll if needed */ background-color: rgb(0, 0, 0); /* Fallback color */ background-color: rgba(0, 0, 0, 0.9); /* Black w/ opacity */ } /* Modal Content (image) */ .modal-content { margin: auto; display: block; width: 1600px; height: 800px; } /* Caption of Modal Image */ #caption { margin: auto; display: block; width: 80%; max-width: 700px; text-align: center; color: #ccc; padding: 10px 0; height: 150px; font-size: 20px; } /* Add Animation */ .modal-content, #caption { -webkit-animation-name: zoom; -webkit-animation-duration: 0.6s; animation-name: zoom; animation-duration: 0.6s; } @-webkit-keyframes zoom { from { -webkit-transform: scale(0) } to { -webkit-transform: scale(1) } } @keyframes zoom { from { transform: scale(0) } to { transform: scale(1) } } /* The Close Button */ .close { position: absolute; top: 15px; right: 35px; color: white; font-size: 40px; font-weight: bold; transition: 0.3s; } .close:hover, .close:focus { color: #bbb; text-decoration: none; cursor: pointer; } /* 100% Image Width on Smaller Screens */ @media only screen and (max-width: 700px) { .modal-content { width: 100%; } } 
 <div class="row"> <div class="column"> <img id="myImg" src="image.gif" alt="img" text-align="center" style="width:100%"><br> </div> <div class="column"> <img id="myImg" src="image2.gif" alt="image2" text-align="center" style="width:100%"><br> </div> </div> <!-- The Modal --> <div id="myModal" class="modal"> <span class="close">&times;</span> <img class="modal-content" id="img01"> <div id="caption"></div> </div> 

I do not have the actual images, but I believe this should work. 我没有实际的图像,但是我认为这应该可行。

 // Get the modal const modal = document.getElementById('myModal'); const modalImg = document.getElementById("img01"); const captionText = document.getElementById("caption"); document.addEventListener('click', (event) => { if (event.target.matches('img')) { loadModalImage(event.target); } }, false); const loadModalImage = (target) => { modal.style.display = "block"; modalImg.src = target.src; captionText.innerHTML = target.alt; } // Get the <span> element that closes the modal const span = document.getElementsByClassName("close")[0]; // When the user clicks on <span> (x), close the modal span.onclick = () => { modal.style.display = "none"; } 
 .column { float: left; width: 50%; padding: 5px; } /* Clearfix (clear floats) */ .row::after { content: ""; clear: both; display: table; } /*Image Loops*/ .myImg { border-radius: 5px; cursor: pointer; transition: 0.3s; } .myImg:hover { opacity: 0.7; } /* The Modal (background) */ .modal { display: none; /* Hidden by default */ position: fixed; /* Stay in place */ z-index: 1; /* Sit on top */ padding-top: 100px; /* Location of the box */ left: 0; top: 0; width: 100%; /* Full width */ height: 100%; /* Full height */ overflow: auto; /* Enable scroll if needed */ background-color: rgb(0, 0, 0); /* Fallback color */ background-color: rgba(0, 0, 0, 0.9); /* Black w/ opacity */ } /* Modal Content (image) */ .modal-content { margin: auto; display: block; width: 1600px; height: 800px; } /* Caption of Modal Image */ #caption { margin: auto; display: block; width: 80%; max-width: 700px; text-align: center; color: #ccc; padding: 10px 0; height: 150px; font-size: 20px; } /* Add Animation */ .modal-content, #caption { -webkit-animation-name: zoom; -webkit-animation-duration: 0.6s; animation-name: zoom; animation-duration: 0.6s; } @-webkit-keyframes zoom { from { -webkit-transform: scale(0) } to { -webkit-transform: scale(1) } } @keyframes zoom { from { transform: scale(0) } to { transform: scale(1) } } /* The Close Button */ .close { position: absolute; top: 15px; right: 35px; color: white; font-size: 40px; font-weight: bold; transition: 0.3s; } .close:hover, .close:focus { color: #bbb; text-decoration: none; cursor: pointer; } /* 100% Image Width on Smaller Screens */ @media only screen and (max-width: 700px) { .modal-content { width: 100%; } } 
 <div class="row"> <div class="column"> <img class="myImg" src="https://picsum.photos/100/100" alt="img" text-align="center" style="width:100%"><br> </div> <div class="column"> <img class="myImg" src="https://picsum.photos/100/100" alt="image2" text-align="center" style="width:100%"><br> </div> </div> <!-- The Modal --> <div id="myModal" class="modal"> <span class="close">&times;</span> <img class="modal-content" id="img01"> <div id="caption"></div> </div> 

First of all this part here : 首先这部分在这里:

var img = document.getElementById("myImg");

is getting only first element with this ID. 仅获得具有此ID的第一个元素。 ID should be unique. ID应该是唯一的。



The solution to this would be using a class instead but there's a problem with that approach. 解决方案是改用类,但是这种方法存在问题。 The problem is when you get elements by Classname it returns HTML collection to which you can't bind an event without looping it which would make things complicated. 问题是,当您通过Classname获取元素时,它会返回HTML集合,您无法将事件绑定到该HTML集合,而无需循环该事件 ,这会使事情变得复杂。 So the best solution to this instead of binding an event use onClick as an attribute and call a function. 因此,对此的最佳解决方案而不是绑定事件,而是使用onClick作为属性并调用函数。

Solution

 var modal = document.getElementById('myModal'); // Get the image and insert it inside the modal - use its "alt" text as a caption var modalImg = document.getElementById("img01"); var captionText = document.getElementById("caption"); function modalOpen(src,alt){ modal.style.display = "block"; modalImg.src = src; captionText.innerHTML = alt; } // 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"; } 
 .column { float: left; width: 50%; padding: 5px; } /* Clearfix (clear floats) */ .row::after { content: ""; clear: both; display: table; } .caption{ text-align:center } /*Image Loops*/ #myImg { border-radius: 5px; cursor: pointer; transition: 0.3s; } #myImg:hover {opacity: 0.7;} /* The Modal (background) */ .modal { display: none; /* Hidden by default */ position: fixed; /* Stay in place */ z-index: 1; /* Sit on top */ padding-top: 100px; /* Location of the box */ left: 0; top: 0; width: 100%; /* Full width */ height: 100%; /* Full height */ overflow: auto; /* Enable scroll if needed */ background-color: rgb(0,0,0); /* Fallback color */ background-color: rgba(0,0,0,0.9); /* Black w/ opacity */ } /* Modal Content (image) */ .modal-content { margin: auto; display: block; width: 1600px; height: 800px; } /* Caption of Modal Image */ #caption { margin: auto; display: block; width: 80%; max-width: 700px; text-align: center; color: #ccc; padding: 10px 0; height: 150px; font-size: 20px; } /* Add Animation */ .modal-content, #caption { -webkit-animation-name: zoom; -webkit-animation-duration: 0.6s; animation-name: zoom; animation-duration: 0.6s; } @-webkit-keyframes zoom { from {-webkit-transform:scale(0)} to {-webkit-transform:scale(1)} } @keyframes zoom { from {transform:scale(0)} to {transform:scale(1)} } /* The Close Button */ .close { position: absolute; top: 15px; right: 35px; color: white; font-size: 40px; font-weight: bold; transition: 0.3s; } .close:hover, .close:focus { color: #bbb; text-decoration: none; cursor: pointer; } /* 100% Image Width on Smaller Screens */ @media only screen and (max-width: 700px){ .modal-content { width: 100%; } } 
 <div class="row"> <div class="column"> <img id="myImg" onclick="modalOpen(this.src,this.alt)" src="http://via.placeholder.com/128x128" alt="img" text-align="center" style="width:100%"><p class="caption">img</p><br> </div> <div class="column"> <img id="myImg" onclick="modalOpen(this.src,this.alt)" src="http://via.placeholder.com/129x129" alt="image2" text-align="center" style="width:100%"><p class="caption">image2</p><br> </div> </div> <!-- The Modal --> <div id="myModal" class="modal"> <span class="close">&times;</span> <img class="modal-content" id="img01"> <div id="caption"></div> </div> 

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

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