2016-06-29 2 views
2

Я пытаюсь создать слайд-шоу изображений, которое воспроизводит все изображения, а на последнем исчезает и больше не отображает изображения еще на 10 секунд, а затем через 10 секунд начинается снова и снова. В настоящее время я останавливаюсь на последнем изображении, но после этого он ничего не делает и просто застревает. Не совсем все, что можно сказать о том, как сделать что-то подобное, чтобы любая помощь была действительно оценена! Ниже приведен JS, если требуется какой-либо другой скрипт, пожалуйста, дайте мне знать!JS Создание таймера для скрыть слайд-шоу

var slideIndex = 0; 
showSlides(); 

function showSlides() { 
    var i; 
    var slides = document.getElementsByClassName("mySlides"); 
    // var dots = document.getElementsByClassName("dot"); 
    for (i = 0; i < slides.length; i++) { 
     slides[i].style.display = "none"; 
    } 
    slideIndex++; 
    if (slideIndex >= slides){ 
     setTimeout(function(){ slideIndex = 1; }, 10000); 
    } 
    /*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"; 
    setTimeout(showSlides, 10000); // Change image every 10 seconds 
} 

UPDATE: setInterval

var slideIndex = 0; 
showSlides(); 

var myPause = setInterval(function(){ showSlides() }, 10000); 

function showSlides() { 
    var i; 
    var slides = document.getElementsByClassName("mySlides"); 
    for (i = 0; i < slides.length; i++) { 
     slides[i].style.display = "none"; 
    } 
    slideIndex++; 
    if (slideIndex > slides.length) { 
     myPause; 
     slideIndex = 1; 
    } 
    slides[slideIndex-1].style.display = "block"; 
    setTimeout(showSlides, 10000); // Change image every 10 seconds 
    clearInterval(myPause); 
} 
+0

Вы уже знакомы с SetTimeout, пожалуйста, также проверить setInterval;) – BillyNate

+0

@BillyNate Так я попробовал, что из, но теперь я, кажется, он просто постоянно играть, без паузы – Klye

+0

@ kyle: вы вызываете метод myPause без(), просто см. мой asnwer ниже для более подробной информации. –

ответ

0

Как BillyNate уже сказал, setInterval делает его работать так, как вы хотите. Чтобы повторить слайд-шоу с 10-секундным перерывом между ними, вам нужно скрыть последний слайд, а затем повторить слайд-шоу через 10 секунд, установив тайм-аут.

Анимация может применяться, когда последний слайд устанавливается на display: none.

var slides = document.getElementsByClassName("mySlides"); 
 

 
function switchSlides() { 
 
    var slideCount = slides.length; 
 
    var i = 0; 
 
    
 
    // Set first slide visible 
 
    slides[i].style.display = "block"; 
 
    
 
    // Switch slide every 10 seconds 
 
    var switchInterval = setInterval(function() { 
 
    i++; 
 
    if (i < slideCount) { 
 
     slides[i-1].style.display = "none"; 
 
     slides[i].style.display = "block"; 
 
    } else { 
 
     clearInterval(switchInterval); 
 

 
     // Hide last slide (--> fade out image) 
 
     slides[i-1].style.display = "none"; 
 
     
 
     // Wait 10 seconds, then repeat switchSlides 
 
     setTimeout(switchSlides, 10000); 
 
    } 
 
    }, 10000); 
 
} 
 

 
switchSlides();
.mySlides { 
 
    display: none; 
 
}
<img class="mySlides" src="http://unsplash.it/200?image=10"> 
 
<img class="mySlides" src="http://unsplash.it/200?image=20"> 
 
<img class="mySlides" src="http://unsplash.it/200?image=30">

3

Вы действительно близко. Просто использования setInterval должно быть достаточно.

var slideIndex = 0; 
 
showSlides(); 
 

 
function showSlides() { 
 
    var i; 
 
    var slides = document.getElementsByClassName("mySlides"); 
 
    for (i = 1; i < slides.length; i++) { 
 
     slides[i].style.display = "none"; 
 
    } 
 
    
 
    setInterval(function() { 
 
     slides[slideIndex].style.display = "none"; 
 
    \t slideIndex ++; 
 
     if(slideIndex >= slides.length) { 
 
      slideIndex = 0; 
 
     } 
 
     else 
 
     { 
 
     slides[slideIndex].style.display = "block"; 
 
     } 
 
    }, 10000); 
 
}
img { display: block; width: 100% }
<img class="mySlides" src="http://ununsplash.imgix.net/photo-1419064642531-e575728395f2?q=75" /> 
 
<img class="mySlides" src="http://ununsplash.imgix.net/photo-1417436026361-a033044d901f?q=75" /> 
 
<img class="mySlides" src="http://ununsplash.imgix.net/photo-1414502622871-b90b0bec7b1f?q=75" />

+0

Эй, Билли подумал, что я могу быть не очень ясным, но я ищу, чтобы он исчез на последнем изображении и больше не отображал изображение за X раз. После того, как я сказал X времени, я хочу, чтобы у вас был слайдов. – Klye

+0

Пока вы хотите, чтобы «пустой слайд» имел такое же количество времени, что и другие слайды, вы можете продолжать использовать 'setInterval' все равно. Я изменил код соответственно. – BillyNate

Смежные вопросы