2016-12-01 1 views
0

Мне нужно сделать HTML-страницу со слайд-шоу. Фотографии из слайд-шоу должны меняться каждые 2 секунды. Через 0,5 секунды после отображения текущего изображения текст должен отображаться над изображением. И это должно быть сделано без использования jQuery или других библиотек, просто функций javascript. Это то, что я имею прямо сейчас, но оно не работает должным образом.Слайд-шоу Javascript, который меняет текст через 0,5 секунды после изменения изображения

var imageIndex = 0; 
    var textIndex = 0; 
    displayImage(); 
    displayText(); 

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

    function displayText() { 
     var i; 
     var x = document.getElementsByClassName("text"); 
     for (i = 0; i < x.length; i++) { 
      x[i].style.display = "none"; 
     } 
     textIndex++; 
     if (textIndex > x.length) {textIndex = 1}  
     x[textIndex-1].style.display = "block"; 
     setTimeout(displayText, 2500);   
    } 



<div class="container"> 
    <div class="mySlides"> 
     <img src="Images/slide1.jpg"> 
     <div class="text">Yunnan, China</div> 
    </div> 

    <div class="mySlides"> 
     <img src="Images/slide2.jpg"> 
     <div class="text">Namib Desert, Africa</div> 
    </div> 

    <div class="mySlides"> 
     <img src="Images/slide3.jpg"> 
     <div class="text">Rapeseed fields in Luoping, China</div> 
    </div> 

    <div class="mySlides"> 
     <img src="Images/slide4.jpg"> 
     <div class="text">Colorado, USA</div> 
    </div> 

</div> 
+2

Определите, что «не работает должным образом». Вы получили сообщение об ошибке? Если да, то в чем его очередь? Помогите нам помочь вам. Кроме того, разместите соответствующий HTML-код, чтобы мы могли запускать код, как он есть. –

+0

Ваша проблема заключается в неправильных действиях. 2000-2500, 4000-5000, 6000-7500 ..... Глядя на время, которое вы видите после каждой итерации, времена продолжают расти ... Либо вам нужно отложить текст на 500, прежде чем устанавливать итерацию на 2000 или вам просто нужно вызвать таймаут после изменения изображения. – epascarello

ответ

1

Похоже, что вы звоните DisplayText каждые 2500 секунд, которые сделают ваш текст шоу ан дополнительного 500мса экспоненциально больших каждый раз

, например,

img 1 = 2000 
text 1 = 2500 (+500) 

img 2 = 4000 
text 2 = 5000 (+1000) 

img 3 = 6000 
text 3 = 7500 (+1500) 

и т.д.

вам нужно будет вызвать функцию displayText() 500 мс после того, как ваше изображение затухает.

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

function displayText() { 
    var i; 
    var x = document.getElementsByClassName("text"); 
    for (i = 0; i < x.length; i++) { 
     x[i].style.display = "none"; 
    } 
    textIndex++; 
    if (textIndex > x.length) {textIndex = 1}  
    x[textIndex-1].style.display = "block";   
} 

Это должно запускать вашу функцию каждый раз, когда изображение изменяется, но только через полсекунды.

+0

Спасибо, это работает отлично. –

0

Это не работает, потому что изображение дисплея и текст дисплея срабатывают в разное время? это должно помочь:

var imageIndex = 0; 
    var textIndex = 0; 
    var timeText = 0; 
    setInterval(displayImage, 2000); 

    function displayImage() { 
     if(timeText !== 0) { //just in case displayImage() takes more than 2000 miliseconds. 
      clearTimeout(timeText); 
     } 
     var i; 
     var x = document.getElementsByClassName("mySlides"); 
     for (i = 0; i < x.length; i++) { 
      x[i].style.display = "none"; 
     } 
     imageIndex++; 
     if (imageIndex > x.length) {imageIndex = 1}  
     x[imageIndex-1].style.display = "block";    
     timeText = setTimeout(displayText, 500); 
    } 

    function displayText() { 
     var i; 
     var x = document.getElementsByClassName("text"); 
     for (i = 0; i < x.length; i++) { 
      x[i].style.display = "none"; 
     } 
     textIndex++; 
     if (textIndex > x.length) {textIndex = 1}  
     x[textIndex-1].style.display = "block"; 
    } 
+0

Спасибо. Оно работает. –

+0

Это просто вопрос цепочки событий, я рад, что это сработало ... если это правильный ответ, отметьте это;) спасибо. –

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