2013-08-27 2 views
1

мой setInterval код работает нормально в первый раз, но он не повторяется правильно - после первого раза он не задерживает между первым и вторым экземплярами. Это проблема с моим кодом или с setInterval?setInverval delay только в первый раз

setInterval(function() { 

     $('#img2').fadeIn(500).delay(5000).fadeOut(500); 

    }, 5000); 

Для уточнения (если мой код действительно испортили!) Я хочу, чтобы мой IMG исчезать в течение 5 секунд, оставаться там в течение 5 секунд, а затем постепенно исчезает - через 5 секунд выгорают, пребывание в течение 5 секунды, исчезают; повторение.

Редактировать: Для уточнения, я думаю, мне нужно спросить: есть ли способ учесть задержку в функция при установке интервала? Сейчас мой интервал происходит одновременно с моей задержкой в ​​функции, и это заставляет время между интервалами быть 0.

Спасибо всем!

+1

«delay (5000)» означает, что следующее повторение 'setInterval' будет уже запущено до завершения задержки. – Barmar

+0

Время для 'delay' и' setInterval' одинаково. попробуйте изменить его. – Praveen

+0

Спасибо за быстрые ответы! Немного смущаюсь здесь. Я изменил время setInterval на 10000, и хотя это делает время между выполнением функции 5 секунд, она делает начальную 10 секунд! Есть ли способ сохранить начальную стрельбу 5 секунд, а также оставшуюся часть интервалов 5 секунд? Еще раз спасибо! – shanling

ответ

1

попробуйте использовать это.

setInterval(function() { 
$('#img2').fadeIn(500); 
$('#img2').delay(5000); 
$('#img2').fadeOut(500); 
}, 5000); 
+0

Это все еще начинается с следующего интервала сразу после последнего :(спасибо за ответ! – shanling

1

Demo

setInterval(function() { 
    $('img').fadeIn(500).delay(500).fadeOut(500); 
}, 500); 
+0

Спасибо за ответ!Однако, когда я меняю значения на 5000 на задержку и время setInterval, это то же самое, что и мой текущий код, который не работает :(Мне нужно, чтобы он задерживался на 5 секунд после его замирания и 5 секунд задержки после него исчезает до начала следующего интервала – shanling

+0

вы можете попробовать 500 500 500 1000 –

4

setInterval() просто запускает функцию на повторяющейся графику, он не основывает повторы о том, как долго каждый из них занимает. Используйте setTimeout, чтобы запланировать перезапуск фиксированного времени после окончания каждого из них.

function delay_and_fade() { 
    setTimeout(function() { 
     $('#img2').fadeIn(500).delay(5000).fadeOut(500); 
     delay_and_fade(); 
    }, 5000); 
} 

delay_and_fade(); 
+0

Спасибо за объяснение! – shanling

0

благодарит за ответы! Я был в состоянии это исправить, изменив свой код к этому:

setInterval(function() { 

     $('#img2').fadeIn(500).delay(5000).fadeOut(500).delay(5000); 

    }, 5000); 

Добавляя задержку после моего FADEOUT он держит 5 секунд между каждым интервалом и имеет 5-секундную задержку на старте! Только то, что я хотел :-)

+0

Осторожно, если я правильно понимаю ваш код, вы будете перекрываться и, возможно, создаете очередь анимации. В 5000 мс он начинается с 5500 (5000 + 500), fadeIn закончен, и он задержится на 5000. При 10000 (5000 + 5000) setInterval снова загорается и добавляет еще одну группу предметов в очередь. В 10 500 (5000 + 500 + 5000) первая задержка завершена и он запускает fadeOut. Выполняется 11 000 fadeOut, и он запускает 5000 задержку. 15 000 setInterval сначала снова добавляет еще одну очередь в очередь (3-я очередь). 16,000 Вторая задержка в 1 очередь заканчивается, начинается вторая очередь. –

0

У вас есть две разные проблемы.

  1. Вы хотите, чтобы ваша анимация fadeIn/Out начиналась после 5 секундной задержки.
  2. Вы хотите, чтобы анимация перезапустилась через 5 секунд после ее завершения.

Чтобы ваш анимации повторить каждые 5 секунд:

function fadeAnimation() { 
    $('#img2').fadeIn(500).delay(5000).fadeOut(500); 
    // this executes immediately, so add 500+5000+500 (6000) to the time 
    // to account for the animation time 
    setTimeout(fadeAnimation, 5000 + 6000); 
} 

Чтобы установить вашу анимацию, чтобы начать через 5 секунд:

setTimeout(fadeAnimation, 5000); 

Имеет ли это смысл?