为不同的模态获取相同的图像
Getting same image for different modals
我无法在我的模式中获得相同的图像,即使我有不同的 类...我确定这是我的 JS 代码,只是无法弄清楚.. ..非常感谢任何帮助。
我还在学习 JS,但知道的就够危险了!我确信这不是最好的编码方式,但我从 W3schools 学习了基础知识并根据我的需要进行了调整。
一开始只有一个modal可以用,后来我想出了怎么把代码写得更详细,现在我只得到了相同的图片。
如何确保它选择正确的?
这是我的代码:
// Get the modal
var modal = document.getElementById("myModal");
// Get the button that opens the modal
var btn = document.getElementById("myBtn");
// Get the <span> element that closes the modal
var span = document.getElementsByClassName("close")[0];
// When the user clicks the button, open the modal
btn.onclick = function() {
modal.style.display = "block";
}
// When the user clicks on <span> (x), close the modal
span.onclick = function() {
modal.style.display = "none";
}
// When the user clicks anywhere outside of the modal, close it
window.onclick = function(event) {
if (event.target == modal) {
modal.style.display = "none";
}
}
// Get the modal
var modal2 = document.getElementById("myModal2");
// Get the button that opens the modal
var btn = document.getElementById("myBtn2");
// Get the <span> element that closes the modal
var span = document.getElementsByClassName("close2")[0];
// When the user clicks the button, open the modal
btn.onclick = function() {
modal.style.display = "block";
}
// When the user clicks on <span> (x), close the modal
span.onclick = function() {
modal.style.display = "none";
}
// When the user clicks anywhere outside of the modal, close it
window.onclick = function(event) {
if (event.target == modal) {
modal.style.display = "none";
}
}
</script>
<button id="myBtn">1</button> <!-- The Modal -->
<div id="myModal" class="modal"><!-- Modal content -->
<div class="modal-content">
<img class="img" src="https://bbk12e1-cdn.myschoolcdn.com/ftpimages/772/misc/misc_190683.123dx" />
<span class="close">×</span>
<div>This is the Galbraith Building</div>
</div>
</div>
<button id="myBtn2">2</button> <!-- The Modal -->
<div id="myModal2" class="modal2"><!-- Modal content -->
<div class="modal-content2">
<img class="img2" src="https://bbk12e1-cdn.myschoolcdn.com/772/photo/2015/06/orig_photo275070_2980857.jpg" />
<span class="close2">×</span>
<div>This is the Galbraith Building</div>
</div>
您正在为这两个函数调用第一个模态。将第二组更改为 modal2.style.display,它应该可以解决您的问题
// Get the modal
var modal = document.getElementById("myModal");
// Get the button that opens the modal
var btn = document.getElementById("myBtn");
// Get the <span> element that closes the modal
var span = document.getElementsByClassName("close")[0];
// When the user clicks the button, open the modal
btn.onclick = function() {
modal.style.display = "block";
}
// When the user clicks on <span> (x), close the modal
span.onclick = function() {
modal.style.display = "none";
}
// When the user clicks anywhere outside of the modal, close it
window.onclick = function(event) {
if (event.target == modal) {
modal.style.display = "none";
}
}
// Get the modal
var modal2 = document.getElementById("myModal2");
// Get the button that opens the modal
var btn = document.getElementById("myBtn2");
// Get the <span> element that closes the modal
var span = document.getElementsByClassName("close2")[0];
// When the user clicks the button, open the modal
btn.onclick = function() {
modal2.style.display = "block";
}
// When the user clicks on <span> (x), close the modal
span.onclick = function() {
modal2.style.display = "none";
}
// When the user clicks anywhere outside of the modal, close it
window.onclick = function(event) {
if (event.target == modal) {
modal2.style.display = "none";
}
}
虽然@Halmon 解决了你的具体问题,但我认为你不应该重复完整的代码行来做同样的事情。
通用演示可以是这样的(我在里面放了注释):
// this is your modal
let modalCon = document.querySelector('#myModal');
// this is an array of images src. it may be helpful if you have more then 2 images.
let chosen = [
'https://bbk12e1-cdn.myschoolcdn.com/772/photo/2015/06/orig_photo275070_2980857.jpg',
'https://bbk12e1-cdn.myschoolcdn.com/ftpimages/772/misc/misc_190683.123dx'
];
// since the number of buttons that will trigger the modal
// is the same as the array indexes you can simply:
// a. add event listener when a button clicked
document.querySelectorAll('#modalTrig button').forEach((btn,i) => btn.addEventListener('click',()=> {
// b. set the src of modal's image
document.querySelector('#myModal img').setAttribute('src', chosen[i]);
// c. show the modal
modalCon.classList.add('show');
}));
// this will close the modal
document.querySelector('#close').addEventListener('click', () => { modalCon.classList.remove('show'); });
/* just for demo */
#myModal {
width: 85%;
max-width: 600px;
margin: auto;
opacity: 0;
transition: 1s ease-in-out;
}
#myModal img {max-width: 100%; height: auto;}
#myModal.show { opacity: 1;}
<nav id="modalTrig">
<button>1</button>
<button>2</button>
</nav>
<aside id="myModal" class="modal"><!-- Modal content -->
<button id="close">×</button>
<figure class="modal-content">
<img id="img" />
<figcaption>This is the Galbraith Building</figcaption>
</figure>
</aside>
PS - 虽然从示例中学习可以更快,但您应该先学习基础知识。开始 here.
我无法在我的模式中获得相同的图像,即使我有不同的 类...我确定这是我的 JS 代码,只是无法弄清楚.. ..非常感谢任何帮助。
我还在学习 JS,但知道的就够危险了!我确信这不是最好的编码方式,但我从 W3schools 学习了基础知识并根据我的需要进行了调整。
一开始只有一个modal可以用,后来我想出了怎么把代码写得更详细,现在我只得到了相同的图片。
如何确保它选择正确的?
这是我的代码:
// Get the modal
var modal = document.getElementById("myModal");
// Get the button that opens the modal
var btn = document.getElementById("myBtn");
// Get the <span> element that closes the modal
var span = document.getElementsByClassName("close")[0];
// When the user clicks the button, open the modal
btn.onclick = function() {
modal.style.display = "block";
}
// When the user clicks on <span> (x), close the modal
span.onclick = function() {
modal.style.display = "none";
}
// When the user clicks anywhere outside of the modal, close it
window.onclick = function(event) {
if (event.target == modal) {
modal.style.display = "none";
}
}
// Get the modal
var modal2 = document.getElementById("myModal2");
// Get the button that opens the modal
var btn = document.getElementById("myBtn2");
// Get the <span> element that closes the modal
var span = document.getElementsByClassName("close2")[0];
// When the user clicks the button, open the modal
btn.onclick = function() {
modal.style.display = "block";
}
// When the user clicks on <span> (x), close the modal
span.onclick = function() {
modal.style.display = "none";
}
// When the user clicks anywhere outside of the modal, close it
window.onclick = function(event) {
if (event.target == modal) {
modal.style.display = "none";
}
}
</script>
<button id="myBtn">1</button> <!-- The Modal -->
<div id="myModal" class="modal"><!-- Modal content -->
<div class="modal-content">
<img class="img" src="https://bbk12e1-cdn.myschoolcdn.com/ftpimages/772/misc/misc_190683.123dx" />
<span class="close">×</span>
<div>This is the Galbraith Building</div>
</div>
</div>
<button id="myBtn2">2</button> <!-- The Modal -->
<div id="myModal2" class="modal2"><!-- Modal content -->
<div class="modal-content2">
<img class="img2" src="https://bbk12e1-cdn.myschoolcdn.com/772/photo/2015/06/orig_photo275070_2980857.jpg" />
<span class="close2">×</span>
<div>This is the Galbraith Building</div>
</div>
您正在为这两个函数调用第一个模态。将第二组更改为 modal2.style.display,它应该可以解决您的问题
// Get the modal
var modal = document.getElementById("myModal");
// Get the button that opens the modal
var btn = document.getElementById("myBtn");
// Get the <span> element that closes the modal
var span = document.getElementsByClassName("close")[0];
// When the user clicks the button, open the modal
btn.onclick = function() {
modal.style.display = "block";
}
// When the user clicks on <span> (x), close the modal
span.onclick = function() {
modal.style.display = "none";
}
// When the user clicks anywhere outside of the modal, close it
window.onclick = function(event) {
if (event.target == modal) {
modal.style.display = "none";
}
}
// Get the modal
var modal2 = document.getElementById("myModal2");
// Get the button that opens the modal
var btn = document.getElementById("myBtn2");
// Get the <span> element that closes the modal
var span = document.getElementsByClassName("close2")[0];
// When the user clicks the button, open the modal
btn.onclick = function() {
modal2.style.display = "block";
}
// When the user clicks on <span> (x), close the modal
span.onclick = function() {
modal2.style.display = "none";
}
// When the user clicks anywhere outside of the modal, close it
window.onclick = function(event) {
if (event.target == modal) {
modal2.style.display = "none";
}
}
虽然@Halmon 解决了你的具体问题,但我认为你不应该重复完整的代码行来做同样的事情。
通用演示可以是这样的(我在里面放了注释):
// this is your modal
let modalCon = document.querySelector('#myModal');
// this is an array of images src. it may be helpful if you have more then 2 images.
let chosen = [
'https://bbk12e1-cdn.myschoolcdn.com/772/photo/2015/06/orig_photo275070_2980857.jpg',
'https://bbk12e1-cdn.myschoolcdn.com/ftpimages/772/misc/misc_190683.123dx'
];
// since the number of buttons that will trigger the modal
// is the same as the array indexes you can simply:
// a. add event listener when a button clicked
document.querySelectorAll('#modalTrig button').forEach((btn,i) => btn.addEventListener('click',()=> {
// b. set the src of modal's image
document.querySelector('#myModal img').setAttribute('src', chosen[i]);
// c. show the modal
modalCon.classList.add('show');
}));
// this will close the modal
document.querySelector('#close').addEventListener('click', () => { modalCon.classList.remove('show'); });
/* just for demo */
#myModal {
width: 85%;
max-width: 600px;
margin: auto;
opacity: 0;
transition: 1s ease-in-out;
}
#myModal img {max-width: 100%; height: auto;}
#myModal.show { opacity: 1;}
<nav id="modalTrig">
<button>1</button>
<button>2</button>
</nav>
<aside id="myModal" class="modal"><!-- Modal content -->
<button id="close">×</button>
<figure class="modal-content">
<img id="img" />
<figcaption>This is the Galbraith Building</figcaption>
</figure>
</aside>
PS - 虽然从示例中学习可以更快,但您应该先学习基础知识。开始 here.