2017-08-15 50 views
0

我想创建一个不需要下载任何内容的灯箱效果。我发现一个很好的解决方案,使用Modal/Slideshow作为灯箱,效果很好。我想在一个页面上有超过1个,并且无法使其工作。以下是示例的链接,所有代码如下。 https://www.w3schools.com/howto/howto_js_lightbox.asp第1页的多灯箱(Modal图片库)

<!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

我想超过1一个页面上的画廊。所以人们可以点击一行图像并查看幻灯片,然后点击下一行并查看单独的幻灯片。 – BigB

回答

0

尝试如果u使用引导

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

我有一个部分答案,因为我正在使用相同的概念(一个页面上有多个lightbox),并使用相同的示例代码!这是部分的,因为我仍然有几个问题,(第二个灯箱的标题还没有通过,并且“活动”图像在第二个灯箱的演示区域也保持不透明。) 希望有人可以改进我已经完成了!

我发现,我需要复制的JS和重命名为第二个收藏夹功能,然后确保你所说的复制&改名版本第二个灯箱:

<!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>