2017-04-24 69 views
0

我想創建一個sideshow,將自動從一個圖片過渡到下一個,但也能夠讓用戶手動更改幻燈片使用上一個和下一個指標。自動幻燈片prev和下一個指標

我使用的教程從這個鏈接: https://www.w3schools.com/howto/howto_js_slideshow.asp

但他們不合並兩個在一起,我找不到任何辦法得到它的工作。

這是代碼,我有:

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("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", ""); 
 
    } 
 
    if (slideIndex> slides.length) {slideIndex = 1} 
 
    slides[slideIndex-1].style.display = "block"; 
 
    dots[slideIndex-1].className += " active"; 
 
    }
/* Slideshow container */ 
 
.slideshow-container { 
 
    display:     flex; 
 
    display:     -webkit-flex; /* Safari 8 */ 
 
    flex-wrap:    wrap; 
 
    -webkit-flex-wrap:  wrap;   /* Safari 8 */ 
 
    justify-content:   center; 
 
    -webkit-justify-content: center; 
 
    margin-left: auto; 
 
    margin-right: auto; 
 
    margin-bottom: 4%; 
 
    width: auto; 
 
    position: relative; 
 
    cursor: pointer; 
 
    box-sizing: border-box; 
 
} 
 

 
.slideshow-container img { 
 
    box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); 
 
    border-radius: 3px; 
 
} 
 

 
@media screen and (max-width: 1000px) { 
 
    .slideshow-container { 
 
    margin-left: auto; 
 
    margin-right: auto; 
 
    max-width: 100%; 
 
    } 
 
} 
 

 
.mySlides { 
 
    display: none; 
 
} 
 

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

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

 
.prev { 
 
left: 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); 
 
} 
 

 
/* Caption text */ 
 
.text { 
 
color: #f2f2f2; 
 
font-size: 15px; 
 
padding: 8px 12px; 
 
position: absolute; 
 
bottom: 50px; 
 
width: 100%; 
 
text-align: center; 
 
} 
 

 
/* The dots/bullets/indicators */ 
 
.dot { 
 
cursor: pointer; 
 
height: 13px; 
 
width: 13px; 
 
bottom: 50px; 
 
margin: 0 2px; 
 
position: relative; 
 
background-color: #bbb; 
 
border-radius: 50%; 
 
display: inline-block; 
 
transition: background-color 0.6s ease; 
 
} 
 

 
.active, .dot:hover { 
 
background-color: #717171; 
 
} 
 

 
/* Fading animation */ 
 
.fade { 
 
-webkit-animation-name: fade; 
 
-webkit-animation-duration: 4s; 
 
animation-name: fade; 
 
animation-duration: 4s; 
 
} 
 

 
@-webkit-keyframes fade { 
 
from {opacity: .4} 
 
to {opacity: 1} 
 
} 
 

 
@keyframes fade { 
 
from {opacity: .4} 
 
to {opacity: 1} 
 
}
<div class="slideshow-container"> 
 
    <div class="mySlides fade"><a href="#"><img src="https://appraw.com/static/previews/downloads/d/z/k/p-desert-zK6WoOEYks-1.jpg" style="width:100%"></a></div> 
 
    <div class="mySlides fade"><a href="#"><img src="http://www.firstnaturetours.com/images/content/oregon-coast-2000x800.jpg" style="width:100%"></a></div> 
 
    <div class="mySlides fade"><a href="#"><img src="http://hdwallpapersbuzz.com/wp-content/uploads/2016/11/Sunrise-Beach-Koh-Lipe-Thailand-HD-Photo-17.jpg" style="width:100%"></a></div> 
 
    <a class="prev" onclick="plusSlides(-1)">&#10094;</a> 
 
    <a class="next" onclick="plusSlides(1)">&#10095;</a> 
 
    <br> 
 
    <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> 
 
</div>

回答

1

我得到這個:

// Start of auto Slideshow 
 

 

 
var myIndex = 0; 
 
carousel(); 
 

 
function carousel() { 
 
    var i; 
 
    var x = document.getElementsByClassName("mySlides "); 
 
    for (i = 0; i < x.length; i++) { 
 
     x[i].style.display = "none "; 
 
    } 
 
    myIndex++; 
 
    if (myIndex > x.length) {myIndex = 1}  
 
    x[myIndex-1].style.display = "block "; 
 
    setTimeout(carousel, 2000); // Change image every 2 seconds 
 
} 
 

 

 
// End of auto Slideshow 
 

 

 

 

 

 
var slideIndex = 1; 
 
showDivs(slideIndex); 
 

 
function plusDivs(n) { 
 
    showDivs(slideIndex += n); 
 
} 
 

 
function currentDiv(n) { 
 
    showDivs(slideIndex = n); 
 
} 
 

 
function showDivs(n) { 
 
    var i; 
 
    var x = document.getElementsByClassName("mySlides "); 
 
    var dots = document.getElementsByClassName("demo "); 
 
    if (n > x.length) {slideIndex = 1}  
 
    if (n < 1) {slideIndex = x.length} 
 
    for (i = 0; i < x.length; i++) { 
 
    x[i].style.display = "none "; 
 
    } 
 
    for (i = 0; i < dots.length; i++) { 
 
    dots[i].className = dots[i].className.replace(" w3-red ", " "); 
 
    } 
 
    x[slideIndex-1].style.display = "block "; 
 
    dots[slideIndex-1].className += " w3-red "; 
 
} 
 

 

 

 

 
var slideIndex = 1; 
 
showDivs(slideIndex); 
 

 
function plusDivs(n) { 
 
    showDivs(slideIndex += n); 
 
} 
 

 
function currentDiv(n) { 
 
    showDivs(slideIndex = n); 
 
} 
 

 
function showDivs(n) { 
 
    var i; 
 
    var x = document.getElementsByClassName("mySlides "); 
 
    var dots = document.getElementsByClassName("demo "); 
 
    if (n > x.length) {slideIndex = 1}  
 
    if (n < 1) {slideIndex = x.length} 
 
    for (i = 0; i < x.length; i++) { 
 
    x[i].style.display = "none "; 
 
    } 
 
    for (i = 0; i < dots.length; i++) { 
 
    dots[i].className = dots[i].className.replace(" w3-red ", " "); 
 
    } 
 
    x[slideIndex-1].style.display = "block "; 
 
    dots[slideIndex-1].className += " w3-red "; 
 
}
body { 
 
background-color: black; 
 
color: red; 
 
} 
 

 

 

 
.mySlides {display:none} 
 
.w3-left, .w3-right, .w3-badge {cursor:pointer} 
 
.w3-badge {height:13px;width:13px;padding:0} 
 
.w3-content w3-display-container { border: 2px solid red; }
<div class= "w3-content w3-display-container " style= "max-width:800px "> 
 

 
<img class= "mySlides " src= "https://appraw.com/static/previews/downloads/d/z/k/p-desert-zK6WoOEYks-1.jpg" style= "width:100% "> 
 
<img class= "mySlides " src= "http://www.firstnaturetours.com/images/content/oregon-coast-2000x800.jpg" style= "width:100% "> 
 
<img class= "mySlides " src= "http://hdwallpapersbuzz.com/wp-content/uploads/2016/11/Sunrise-Beach-Koh-Lipe-Thailand-HD-Photo-17.jpg" style= "width:100% "> 
 

 

 
    <div class= "w3-center "> 
 
     <div class= "w3-section "> 
 
     <div class= "w3-left w3-padding-left w3-hover-text-khaki " onclick= "plusDivs(-1) ">&#10094;</div> 
 
     <div class= "w3-right w3-padding-right w3-hover-text-khaki " onclick= "plusDivs(1) ">&#10095;</div> 
 
     </div> 
 
     <span class= "w3-badge demo w3-border w3-transparent w3-hover-red " onclick= "currentDiv(1) "></span> 
 
     <span class= "w3-badge demo w3-border w3-transparent w3-hover-red " onclick= "currentDiv(2) "></span> 
 
     <span class= "w3-badge demo w3-border w3-transparent w3-hover-red " onclick= "currentDiv(3) "></span> 
 

 
     </div> 
 

 
    </div>

然而,似乎有BA一些問題。我無法弄清楚爲什麼圓形按鈕是透明的。

+0

真棒。謝謝,我得到它的工作。我可以弄清楚如何修復圓形按鈕,但我一直試圖弄清楚這一點,並且你幫了我一些忙。 Upvoted – Michael

+0

不客氣。 – Sank6

0

是太糟糕了,他們沒有使樣品兼容。爲了保持它在你身邊有原代碼,只需使用一個間隔調用plusSlides(1)

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("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", ""); 
    } 
    if (slideIndex> slides.length) {slideIndex = 1} 
    slides[slideIndex-1].style.display = "block"; 
    dots[slideIndex-1].className += " active"; 
} 
setInterval(plusSlides, 2000, 1); // call plusSlider, with 1 as parameter