Как сделать модальные окна с увеличением картинок?
На одном изображении есть модальное окно, а на втором нету. На сайте 4 изображения в целом. Как сделать рабочее модальное окно на каждое изображение?
var modal = document.querySelector('#main-modal');
var img = document.querySelector('#main-img');
var modalImg = document.querySelector('#img01');
img.onclick = function() {
modal.style.display = "block";
modalImg.src = this.src;
document.body.style.overflow = "hidden";
}
var span = document.getElementsByClassName("close")[0];
span.onclick = function () {
modal.style.display = "none";
document.body.style.overflow = "";
}
modal.onclick = function() {
modal.style.display = "none";
document.body.style.overflow = "";
}
<div class="center-text">
<img src="images/photo-1.jpg" id="main-img" alt="">
<div id="main-modal" class="modal">
<span class="close" onclick=" document.getElementById('main-modal').style.display='none' ">×</span>
<img class="modal-content" id="img01">
</div>
</div>
<div class="right-text">
<img src="images/photo-2.jpg" id="main-img" alt="">
<div id="main-modal" class="modal">
<span class="close" onclick=" document.getElementById('main-modal').style.display='none' ">×</span>
<img class="modal-content" id="img01">
</div>
</div>
var modal = document.querySelector('#main-modal');
var img = document.querySelector('#main-img');
var modalImg = document.querySelector('#img01');
img.onclick = function() {
modal.style.display = "block";
modalImg.src = this.src;
document.body.style.overflow = "hidden";
}
var span = document.getElementsByClassName("close")[0];
span.onclick = function () {
modal.style.display = "none";
document.body.style.overflow = "";
}
modal.onclick = function() {
modal.style.display = "none";
document.body.style.overflow = "";
}
.main-photo img {
height: 100%;
width: 100%;
}
.main-photo .center-text {
padding-right: 10px;
}
.main-photo .left-text {
text-align: end;
}
.main-photo .left-text button {
margin-right: 40px;
width: 100px;
height: 30px;
border: none;
cursor: pointer;
color: #ffffff;
font-size: 15px;
font-weight: 600;
background: -webkit-linear-gradient(210deg, #97dbe8,#3f74a3);
background: linear-gradient(210deg, #45c5de,#b9d2e8);
}
#main-img {
cursor: pointer;
transition: 0.3s;
}
#main-img:hover {
opacity: 0.9;
}
.modal {
display: none;
position: fixed;
overflow: 0;
z-index: 1000;
padding: 0 auto;
top: 0;
left: 0;
width: 100%;
height: 100%;
overflow: auto;
background-color: rgb(0, 0, 0);
background-color: rgba(0, 0, 0, 0.8);
}
.modal-content {
z-index: 1000;
display: block;
margin-top: 40px;
padding: 20px 100px;
max-height: 90%;
overflow: 0;
width: 100%;
}
.modal-content {
-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);}
}
.close {
position: absolute;
top: 15px;
right: 35px;
color: #f1f1f1;
font-size: 40px;
font-weight: bold;
transition: 0.3s;
}
.close:hover, .close:focus {
color: #bbb;
text-decoration: none;
cursor: pointer;
}
@media only screen and (max-width: 700px) {
.modal-content {
width: 100%;
}
}
<div class="main-photo">
<div class="left-text">
<button>фото 1,2</button>
</div>
<div class="center-text">
<img src="images/photo-1.jpg" id="main-img" alt="">
<div id="main-modal" class="modal">
<span class="close" onclick=" document.getElementById('main-modal').style.display='none' ">×</span>
<img class="modal-content" id="img01">
</div>
</div>
<div class="right-text">
<img src="images/photo-2.jpg" id="main-img" alt="">
<div id="main-modal" class="modal">
<span class="close" onclick=" document.getElementById('main-modal').style.display='none' ">×</span>
<img class="modal-content" id="img01">
</div>
</div>
</div>
Ответы (1 шт):
Автор решения: Danila
→ Ссылка
Для решения данной задачи достаточно одного модального окна, в которое будут передаваться src картинок при клике на них:
$('.pic-wrap img').on('click',function(){ //при клике на любую из картинок
let src = $(this).attr('src'); //получаем src этой картинки
$('.modal-content').attr('src',src); //передаём в модальное окно
$('.modal').addClass('open'); //делаем окно видимым
})
$('.close').on('click',function(){ //при клике на крестик
$('.modal').removeClass('open'); //скрываем модальное окно
})
.pic-wrap {
display: flex;
justify-content: space-between;
}
.pic-wrap img {
display: block;
margin-bottom: 15px;
width: 24%;
cursor: pointer;
}
.modal {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0,0,0,.5);
opacity: 0;
z-index: -1;
transition: .3s;
display: flex;
overflow: auto;
}
.modal.open {
opacity: 1;
z-index: 1;
}
.modal-body {
width: 90%;
max-width: 1000px;
margin: auto;
position: relative;
}
.modal-content {
display: block;
max-width: 100%;
}
.close {
cursor: pointer;
position: absolute;
right: 8px;
top: 5px;
color: #fff;
}
@media (max-width: 800px) {
.pic-wrap {
flex-wrap: wrap;
}
.pic-wrap img {
width: 49%;
}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="pic-wrap">
<img src="https://funart.pro/uploads/posts/2019-10/1570458871_sportkary-170.jpg" alt="">
<img src="https://krot.info/uploads/posts/2021-11/1635823006_5-krot-info-p-sportivnie-sportkari-mashini-krasivo-foto-5.jpg" alt="">
<img src="https://w.wallhaven.cc/full/mp/wallhaven-mp8qk8.jpg" alt="">
<img src="https://on-desktop.com/wps/2017Auto___Lamborghini_Silver_sport_car_Lamborghini_Veneno_on_a_green_lawn_114675_.jpg" alt="">
</div>
<div class="modal">
<span class="modal-body">
<span class="close">×</span>
<img class="modal-content">
</span>
</div>