'Avoid duplicate code with lightbox html,css,js
Hello guys i stuck with the following problem:
I want to have more than 1 flex-item with the lightbox/modals for my images with slider. But with this code, it works only for one item. How can i write the code that JavaScript knows it should use the functions only in the clicked container without rename all the functions and so on??
Here is my JavaScript & HTML:
let slideIndex = 1;
showSlides(slideIndex);
function plusSlides(n) {
showSlides((slideIndex += n));
}
function currentSlide(n) {
showSlides((slideIndex = n));
}
function showSlides(n) {
let i;
let slides = document.getElementsByClassName("mySlides");
let dots = document.getElementsByClassName("dot");
if (n > slides.length) {
slideIndex = 1;
}
if (n < 1) {
slideIndex = slides.length;
}
for (i = 0; i < slides.length; i++) {
slides[i].style.display = "none";
}
for (i = 0; i < dots.length; i++) {
dots[i].className = dots[i].className.replace(" active", "");
}
slides[slideIndex - 1].style.display = "block";
dots[slideIndex - 1].className += " active";
}
// Open the Modal
function openModal() {
document.getElementById("myModal").style.display = "block";
document.body.style.overflow = "hidden";
}
// Close the Modal
function closeModal() {
document.getElementById("myModal").style.display = "none";
document.body.style.overflow = "auto";
}
let slideIndexLightbox = 1;
showSlidesLightbox(slideIndexLightbox);
// Next/previous controls
function plusSlidesLightbox(n) {
showSlidesLightbox((slideIndexLightbox += n));
}
// Thumbnail image controls
function currentSlideLightbox(n) {
showSlidesLightbox((slideIndexLightbox = n));
}
function showSlidesLightbox(n) {
let i;
let slides = document.getElementsByClassName("mySlidesLightbox");
let dots = document.getElementsByClassName("demo");
let captionText = document.getElementById("caption");
if (n > slides.length) {
slideIndexLightbox = 1;
}
if (n < 1) {
slideIndexLightbox = slides.length;
}
for (i = 0; i < slides.length; i++) {
slides[i].style.display = "none";
}
for (i = 0; i < dots.length; i++) {
dots[i].className = dots[i].className.replace(" active", "");
}
slides[slideIndexLightbox - 1].style.display = "block";
dots[slideIndexLightbox - 1].className += " active";
captionText.innerHTML = dots[slideIndexLightbox - 1].alt;
}
<article class="flex-item-1">
<section>
<div class="slideshow-container">
<div class="mySlides fade">
<img src="image.png" onclick="openModal();currentSlideLightbox(1)">
</div>
<div class="mySlides fade">
<img src="image.png" onclick="openModal();currentSlideLightbox(2)">
</div>
<div class="mySlides fade">
<img src="image.png" onclick="openModal();currentSlideLightbox(3)">
</div>
<a class="prev" onclick="plusSlides(-1)">❮</a>
<a class="next" onclick="plusSlides(1)">❯</a>
<div style="text-align:center">
<span class="dot" onclick="currentSlide(1)"></span>
<span class="dot" onclick="currentSlide(2)"></span>
<span class="dot" onclick="currentSlide(3)"></span>
</div>
<!-- The Modal/Lightbox -->
<div id="myModal" class="modal">
<span class="close cursor" onclick="closeModal()">×</span>
<div class="modal-content">
<div class="mySlidesLightbox">
<div class="numbertext">1 / 3</div>
<img src="image.png" style="width:100%">
</div>
<div class="mySlidesLightbox">
<div class="numbertext">2 / 3</div>
<img src="image.png" style="width:100%">
</div>
<div class="mySlidesLightbox">
<div class="numbertext">3 / 3</div>
<img src="image.png" style="width:100%">
</div>
<a class="prevLightbox" onclick="plusSlidesLightbox(-1)">❮</a>
<a class="nextLightbox" onclick="plusSlidesLightbox(1)">❯</a>
<div class="caption-container">
<p id="caption"></p>
</div>
<div class="column-lightbox">
<img class="demo" src="image.png" onclick="currentSlideLightbox(1)" alt="Nature">
<img class="demo" src="image.png" onclick="currentSlideLightbox(2)" alt="Snow">
<img class="demo" src="image.png" onclick="currentSlideLightbox(3)" alt="Snow">
</div>
</div>
</div>
</div>
</section>
</article>
Thanks!!
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
