2017-08-15 9 views
0

Je voudrais créer un effet de visionneuse sans rien télécharger. J'ai trouvé une bonne solution en utilisant Modal/Slideshow comme une lightbox et ça marche bien. Je voudrais avoir plus de 1 sur une page et ne peux pas le faire fonctionner. Voici un lien vers l'exemple et tout le code est ci-dessous. https://www.w3schools.com/howto/howto_js_lightbox.aspLightbox multiple (Modal Image Gallery) sur 1 page

<!DOCTYPE html> 
<html> 
<meta name="viewport" content="width=device-width, initial-scale=1"> 
<style> 
body { 
    font-family: Verdana, sans-serif; 
    margin: 0; 
} 

* { 
    box-sizing: border-box; 
} 

.row > .column { 
    padding: 0 8px; 
} 

.row:after { 
    content: ""; 
    display: table; 
    clear: both; 
} 

.column { 
    float: left; 
    width: 25%; 
} 

/* The Modal (background) */ 
.modal { 
    display: none; 
    position: fixed; 
    z-index: 1; 
    padding-top: 100px; 
    left: 0; 
    top: 0; 
    width: 100%; 
    height: 100%; 
    overflow: auto; 
    background-color: black; 
} 

/* Modal Content */ 
.modal-content { 
    position: relative; 
    background-color: #fefefe; 
    margin: auto; 
    padding: 0; 
    width: 90%; 
    max-width: 1200px; 
} 

/* The Close Button */ 
.close { 
    color: white; 
    position: absolute; 
    top: 10px; 
    right: 25px; 
    font-size: 35px; 
    font-weight: bold; 
} 

.close:hover, 
.close:focus { 
    color: #999; 
    text-decoration: none; 
    cursor: pointer; 
} 

.mySlides { 
    display: none; 
} 

.cursor { 
    cursor: pointer 
} 

/* Next & previous buttons */ 
.prev, 
.next { 
    cursor: pointer; 
    position: absolute; 
    top: 50%; 
    width: auto; 
    padding: 16px; 
    margin-top: -50px; 
    color: white; 
    font-weight: bold; 
    font-size: 20px; 
    transition: 0.6s ease; 
    border-radius: 0 3px 3px 0; 
    user-select: none; 
    -webkit-user-select: none; 
} 

/* Position the "next button" to the right */ 
.next { 
    right: 0; 
    border-radius: 3px 0 0 3px; 
} 

/* On hover, add a black background color with a little bit see-through */ 
.prev:hover, 
.next:hover { 
    background-color: rgba(0, 0, 0, 0.8); 
} 

/* Number text (1/3 etc) */ 
.numbertext { 
    color: #f2f2f2; 
    font-size: 12px; 
    padding: 8px 12px; 
    position: absolute; 
    top: 0; 
} 

img { 
    margin-bottom: -4px; 
} 

.caption-container { 
    text-align: center; 
    background-color: black; 
    padding: 2px 16px; 
    color: white; 
} 

.demo { 
    opacity: 0.6; 
} 

.active, 
.demo:hover { 
    opacity: 1; 
} 

img.hover-shadow { 
    transition: 0.3s 
} 

.hover-shadow:hover { 
    box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19) 
} 
</style> 
<body> 

<h2 style="text-align:center">Lightbox</h2> 

<div class="row"> 
    <div class="column"> 
    <img src="img_nature.jpg" style="width:100%" onclick="openModal();currentSlide(1)" class="hover-shadow cursor"> 
    </div> 
    <div class="column"> 
    <img src="img_fjords.jpg" style="width:100%" onclick="openModal();currentSlide(2)" class="hover-shadow cursor"> 
    </div> 
    <div class="column"> 
    <img src="img_mountains.jpg" style="width:100%" onclick="openModal();currentSlide(3)" class="hover-shadow cursor"> 
    </div> 
    <div class="column"> 
    <img src="img_lights.jpg" style="width:100%" onclick="openModal();currentSlide(4)" class="hover-shadow cursor"> 
    </div> 
</div> 

<div id="myModal" class="modal"> 
    <span class="close cursor" onclick="closeModal()">&times;</span> 
    <div class="modal-content"> 

    <div class="mySlides"> 
     <div class="numbertext">1/4</div> 
     <img src="img_nature_wide.jpg" style="width:100%"> 
    </div> 

    <div class="mySlides"> 
     <div class="numbertext">2/4</div> 
     <img src="img_fjords_wide.jpg" style="width:100%"> 
    </div> 

    <div class="mySlides"> 
     <div class="numbertext">3/4</div> 
     <img src="img_mountains_wide.jpg" style="width:100%"> 
    </div> 

    <div class="mySlides"> 
     <div class="numbertext">4/4</div> 
     <img src="img_lights_wide.jpg" style="width:100%"> 
    </div> 

    <a class="prev" onclick="plusSlides(-1)">&#10094;</a> 
    <a class="next" onclick="plusSlides(1)">&#10095;</a> 

    <div class="caption-container"> 
     <p id="caption"></p> 
    </div> 


    <div class="column"> 
     <img class="demo cursor" src="img_nature_wide.jpg" style="width:100%" onclick="currentSlide(1)" alt="Nature and sunrise"> 
    </div> 
    <div class="column"> 
     <img class="demo cursor" src="img_fjords_wide.jpg" style="width:100%" onclick="currentSlide(2)" alt="Trolltunga, Norway"> 
    </div> 
    <div class="column"> 
     <img class="demo cursor" src="img_mountains_wide.jpg" style="width:100%" onclick="currentSlide(3)" alt="Mountains and fjords"> 
    </div> 
    <div class="column"> 
     <img class="demo cursor" src="img_lights_wide.jpg" style="width:100%" onclick="currentSlide(4)" alt="Northern Lights"> 
    </div> 
    </div> 
</div> 

<script> 
function openModal() { 
    document.getElementById('myModal').style.display = "block"; 
} 

function closeModal() { 
    document.getElementById('myModal').style.display = "none"; 
} 

var slideIndex = 1; 
showSlides(slideIndex); 

function plusSlides(n) { 
    showSlides(slideIndex += n); 
} 

function currentSlide(n) { 
    showSlides(slideIndex = n); 
} 

function showSlides(n) { 
    var i; 
    var slides = document.getElementsByClassName("mySlides"); 
    var dots = document.getElementsByClassName("demo"); 
    var captionText = document.getElementById("caption"); 
    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"; 
    captionText.innerHTML = dots[slideIndex-1].alt; 
} 
</script> 

</body> 
</html> 
+0

Je veux plus de 1 galerie sur une page. Les utilisateurs peuvent donc cliquer sur une rangée d'images et voir le diaporama, puis cliquer sur la rangée suivante et voir un diaporama séparé. – BigB

Répondre

0

Essayez si u utilisez bootstrap

HTML

<div class="container"> 
    <div class="row"> 
    <div class="column"> 
    <img src="https://fakeimg.pl/200x200/" onclick="openModal();currentSlide(1)" class="hover-shadow"> 
    </div> 
    <div class="column"> 
    <img src="https://fakeimg.pl/200x200/" onclick="openModal();currentSlide(2)" class="hover-shadow"> 
    </div> 
    <div class="column"> 
    <img src="https://fakeimg.pl/200x200/" onclick="openModal();currentSlide(3)" class="hover-shadow"> 
    </div> 
    <div class="column"> 
    <img src="https://fakeimg.pl/200x200/" onclick="openModal();currentSlide(4)" class="hover-shadow"> 
    </div> 
</div> 

<div id="myModal" class="modal"> 
    <span class="close cursor" onclick="closeModal()">×</span> 
    <div class="modal-content"> 

    <div class="mySlides"> 
     <div class="numbertext">1/4</div> 
     <img src="https://fakeimg.pl/2500x500/" style="width:100%"> 
    </div> 

    <div class="mySlides"> 
     <div class="numbertext">2/4</div> 
     <img src="https://fakeimg.pl/2500x500/" style="width:100%"> 
    </div> 

    <div class="mySlides"> 
     <div class="numbertext">3/4</div> 
     <img src="https://fakeimg.pl/2500x500/" style="width:100%"> 
    </div> 

    <div class="mySlides"> 
     <div class="numbertext">4/4</div> 
     <img src="https://fakeimg.pl/2500x500/" style="width:100%"> 
    </div> 

    <a class="prev" onclick="plusSlides(-1)">❮</a> 
    <a class="next" onclick="plusSlides(1)">❯</a> 

    <div class="caption-container"> 
     <p id="caption"></p> 
    </div> 

    <div class="column"> 
     <img class="demo" src="https://fakeimg.pl/250x250/" onclick="currentSlide(1)"> 
    </div> 

    <div class="column"> 
     <img class="demo" src="https://fakeimg.pl/250x250/" onclick="currentSlide(2)"> 
    </div> 

    <div class="column"> 
     <img class="demo" src="https://fakeimg.pl/250x250/" onclick="currentSlide(3)"> 
    </div> 

    <div class="column"> 
     <img class="demo" src="https://fakeimg.pl/250x250/" onclick="currentSlide(4)"> 
    </div> 
    </div> 
</div> 
</div> 

CSS

.row > .column { 
    padding: 0 8px; 
} 

.row:after { 
    content: ""; 
    display: table; 
    clear: both; 
} 

.column { 
    float: left; 
    width: 25%; 
} 

/* The Modal (background) */ 
.modal { 
    display: none; 
    position: fixed; 
    z-index: 1; 
    padding-top: 100px; 
    left: 0; 
    top: 0; 
    width: 100%; 
    height: 100%; 
    overflow: auto; 
    background-color: black; 
} 

/* Modal Content */ 
.modal-content { 
    position: relative; 
    background-color: #fefefe; 
    margin: auto; 
    padding: 0; 
    width: 90%; 
    max-width: 1200px; 
} 

/* The Close Button */ 
.close { 
    color: white; 
    position: absolute; 
    top: 10px; 
    right: 25px; 
    font-size: 35px; 
    font-weight: bold; 
} 

.close:hover, 
.close:focus { 
    color: #999; 
    text-decoration: none; 
    cursor: pointer; 
} 

.mySlides { 
    display: none; 
} 

/* Next & previous buttons */ 
.prev, 
.next { 
    cursor: pointer; 
    position: absolute; 
    top: 50%; 
    width: auto; 
    padding: 16px; 
    margin-top: -50px; 
    color: white; 
    font-weight: bold; 
    font-size: 20px; 
    transition: 0.6s ease; 
    border-radius: 0 3px 3px 0; 
    user-select: none; 
    -webkit-user-select: none; 
} 

/* Position the "next button" to the right */ 
.next { 
    right: 0; 
    border-radius: 3px 0 0 3px; 
} 

/* On hover, add a black background color with a little bit see-through */ 
.prev:hover, 
.next:hover { 
    background-color: rgba(0, 0, 0, 0.8); 
} 

/* Number text (1/3 etc) */ 
.numbertext { 
    color: #f2f2f2; 
    font-size: 12px; 
    padding: 8px 12px; 
    position: absolute; 
    top: 0; 
} 

.caption-container { 
    text-align: center; 
    background-color: black; 
    padding: 2px 16px; 
    color: white; 
} 

img.demo { 
    opacity: 0.6; 
} 

.active, 
.demo:hover { 
    opacity: 1; 
} 

img.hover-shadow { 
    transition: 0.3s 
} 

.hover-shadow:hover { 
    box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19) 
} 

JS

function openModal() { 
    document.getElementById('myModal').style.display = "block"; 
} 

function closeModal() { 
    document.getElementById('myModal').style.display = "none"; 
} 

var slideIndex = 1; 
showSlides(slideIndex); 

function plusSlides(n) { 
    showSlides(slideIndex += n); 
} 

function currentSlide(n) { 
    showSlides(slideIndex = n); 
} 

function showSlides(n) { 
    var i; 
    var slides = document.getElementsByClassName("mySlides"); 
    var dots = document.getElementsByClassName("demo"); 
    var captionText = document.getElementById("caption"); 
    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"; 
    captionText.innerHTML = dots[slideIndex-1].alt; 
} 
0

J'ai une réponse partielle parce que je travaille sur le même concept (plusieurs lightboxes sur une page) et utilisé le même exemple de code! C'est partiel parce que le mien a encore quelques problèmes, (les légendes pour la deuxième lightbox ne sont pas encore arrivées et l'image "active" reste opaque dans la zone de démonstration pour la deuxième lightbox aussi.) J'espère que quelqu'un peut améliorer ce que je l'ai fait!

Ce que j'ai trouvé que je devais copier le JS et renommer les fonctions pour la deuxième visionneuse, puis assurez-vous que vous appelez le copié & version renommée pour la deuxième lightbox:

<!DOCTYPE html> 
<html> 
<meta name="viewport" content="width=device-width, initial-scale=1"> 
<script> 
    .demo, .demo2 { 
    opacity: 0.6; 
    margin-top: 1px; 
} 

.mySlides, .mySlides2 { 
    display: none; 
} 

</script> 
<body> 

<h2 style="text-align:center">Lightbox</h2> 

<!-- First lightbox --> 
<div class="row"> 
    <div class="column"> 
    <img src="img_nature.jpg" style="width:100%" onclick="openModal();currentSlide(1)" class="hover-shadow cursor"> 
    </div> 
    <div class="column"> 
    <img src="img_fjords.jpg" style="width:100%" onclick="openModal();currentSlide(2)" class="hover-shadow cursor"> 
    </div> 
    <div class="column"> 
    <img src="img_mountains.jpg" style="width:100%" onclick="openModal();currentSlide(3)" class="hover-shadow cursor"> 
    </div> 
    <div class="column"> 
    <img src="img_lights.jpg" style="width:100%" onclick="openModal();currentSlide(4)" class="hover-shadow cursor"> 
    </div> 
</div> 

<div id="myModal" class="modal"> 
    <span class="close cursor" onclick="closeModal()">&times;</span> 
    <div class="modal-content"> 

    <div class="mySlides"> 
     <div class="numbertext">1/4</div> 
     <img src="img_nature_wide.jpg" style="width:100%"> 
    </div> 

    <div class="mySlides"> 
     <div class="numbertext">2/4</div> 
     <img src="img_fjords_wide.jpg" style="width:100%"> 
    </div> 

    <div class="mySlides"> 
     <div class="numbertext">3/4</div> 
     <img src="img_mountains_wide.jpg" style="width:100%"> 
    </div> 

    <div class="mySlides"> 
     <div class="numbertext">4/4</div> 
     <img src="img_lights_wide.jpg" style="width:100%"> 
    </div> 

    <a class="prev" onclick="plusSlides(-1)">&#10094;</a> 
    <a class="next" onclick="plusSlides(1)">&#10095;</a> 

    <div class="caption-container"> 
     <p id="caption"></p> 
    </div> 


    <div class="column"> 
     <img class="demo cursor" src="img_nature_wide.jpg" style="width:100%" onclick="currentSlide(1)" alt="Nature and sunrise"> 
    </div> 
    <div class="column"> 
     <img class="demo cursor" src="img_fjords_wide.jpg" style="width:100%" onclick="currentSlide(2)" alt="Trolltunga, Norway"> 
    </div> 
    <div class="column"> 
     <img class="demo cursor" src="img_mountains_wide.jpg" style="width:100%" onclick="currentSlide(3)" alt="Mountains and fjords"> 
    </div> 
    <div class="column"> 
     <img class="demo cursor" src="img_lights_wide.jpg" style="width:100%" onclick="currentSlide(4)" alt="Northern Lights"> 
      </div> 
    </div> 
</div> 

<!-- Second lightbox --> 
    <div id="myModal2" class="modal"> 
    <span class="close cursor" onclick="closeModal2()">&times;</span> 
    <div class="modal-content"> 

     <div class="mySlides2"> 
     <div class="numbertext">1/4</div> 
     <img src="img/farm1Slice.png" style="width:100%"> 
     </div> 

     <div class="mySlides"> 
     <div class="numbertext">2/4</div> 
     <img src="img_fjords_wide.jpg" style="width:100%"> 
     </div> 

     <div class="mySlides"> 
     <div class="numbertext">3/4</div> 
     <img src="img_mountains_wide.jpg" style="width:100%"> 
     </div> 

     <div class="mySlides"> 
     <div class="numbertext">4/4</div> 
     <img src="img_lights_wide.jpg" style="width:100%"> 
     </div> 

     <a class="prev" onclick="plusSlides2(-1)">&#10094;</a> 
     <a class="next" onclick="plusSlides2(1)">&#10095;</a> 

     <div class="caption-container"> 
     <p id="caption"></p> 
     </div> 


     <div class="column"> 
     <img class="demo2 cursor" src="img_nature_wide.jpg" style="width:100%" onclick="currentSlide2(1)" alt="Nature and sunrise"> 
     </div> 
     <div class="column"> 
     <img class="demo2 cursor" src="img_fjords_wide.jpg" style="width:100%" onclick="currentSlide2(2)" alt="Trolltunga, Norway"> 
     </div> 
     <div class="column"> 
     <img class="demo2 cursor" src="img_mountains_wide.jpg" style="width:100%" onclick="currentSlide2(3)" alt="Mountains and fjords"> 
     </div> 
     <div class="column"> 
     <img class="demo2 cursor" src="img_lights_wide.jpg" style="width:100%" onclick="currentSlide2(4)" alt="Northern Lights"> 
      </div> 
    </div> 
    </div> 


<script> 
function openModal() { 
    document.getElementById('myModal').style.display = "block"; 
} 

function closeModal() { 
    document.getElementById('myModal').style.display = "none"; 
} 

var slideIndex = 1; 
showSlides(slideIndex); 

function plusSlides(n) { 
    showSlides(slideIndex += n); 
} 

function currentSlide(n) { 
    showSlides(slideIndex = n); 
} 

function showSlides(n) { 
    var i; 
    var slides = document.getElementsByClassName("mySlides"); 
    var dots = document.getElementsByClassName("demo"); 
    var captionText = document.getElementById("caption"); 
    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"; 
    captionText.innerHTML = dots[slideIndex-1].alt; 
} 
</script> 

<!--Second lightbox code --> 
<script> 
function openModal2() { 
    document.getElementById('myModal2').style.display = "block"; 
} 

function closeModal() { 
    document.getElementById('myModal2').style.display = "none"; 
} 

var slideIndex = 1; 
showSlides2(slideIndex); 

function plusSlides2(n) { 
    showSlides2(slideIndex += n); 
} 

function currentSlide2(n) { 
    showSlides2(slideIndex = n); 
} 

function showSlides2(n) { 
    var i; 
    var slides = document.getElementsByClassName("mySlides2"); 
    var dots = document.getElementsByClassName("demo"); 
    var captionText = document.getElementById("caption"); 
    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"; 
    captionText.innerHTML = dots[slideIndex-1].alt; 
} 
</script> 

</body> 
</html>