SetTimeout работает только один раз?
function slide()
{
if($('.current').is(':last-child')){
$('.current').removeClass('.current');
$('#imgholder').first().addClass('.current');
$('#imgholder').animate({left: '3920px'});
}
else{
$nxt=$(".current");
$(".current").removeClass("current");
$nxt.next().addClass("current");
$('#imgholder').animate({left: '-=980'},{duration: 'slow', easing: 'easeOutBounce' });
}
}
var loop_handle= setTimeout("slide()",'3000');
Я поместил этот код в раздел заголовка, и setTimeout запускается только один раз.
Ответы
Ответ 1
setTimeout
должен запускаться только один раз. Вы ищете setInterval
.
var loop_handle = setInterval(slide, 3000);
Кроме того, второй аргумент должен быть числом, а не строкой. Когда вызов функции не требует каких-либо аргументов, лучше использовать ссылку вместо этой строки. Строка будет преобразована в функцию. Эта функция будет выполнена в рамках окна.
setInterval("slide()", 3000);
//becomes
setInterval(Function("slide();"), 3000);
Ответ 2
Вы вызываете его только один раз, поэтому он будет выполняться только один раз.
Возможно, вы думаете о "setInterval()".
Когда вы вызываете это, кстати, просто передайте имя функции, а не строку:
setInterval(slide, 3000);
Ответ 3
Вы ищете setInterval
Смотрите: https://developer.mozilla.org/en/window.setInterval
Ответ 4
Функция setTimeout
запускается только один раз! Если вы хотите запустить его в несколько раз, вы должны использовать setInterval
:
var loop_handle= setInterval("slide()",'3000');
Также вы можете использовать setTimeout
в конце функции slide()
для повторного набора времени ожидания:
var loop_handle;
function slide() {
if($('.current').is(':last-child')) {
$('.current').removeClass('.current');
$('#imgholder').first().addClass('.current');
$('#imgholder').animate({left: '3920px'});
}
else {
$nxt=$(".current");
$(".current").removeClass("current");
$nxt.next().addClass("current");
$('#imgholder').animate({left: '-=980'},{duration: 'slow', easing: 'easeOutBounce' });
}
loop_handle = setTimeout("slide()",'3000');
}
loop_handle = setTimeout("slide()",'3000');
Ответ 5
Да, setTimeout запускается только один раз. Вам нужно установитьInterval.
Ответ 6
Это потому, что setTimeout()
предполагается запустить только один раз. Чтобы запустить событие с установленными интервалами, пользователь setInterval()
.
Ответ 7
использовать setTimeout с рекурсией (бесконечный цикл)
Если вы хотите сохранить точное расстояние между вызовами каждой функции, используйте setTimeout вместо setInterval. setInterval может перекрываться в некоторый момент, и это часто не ожидаемое поведение.
(function test(){
setTimeout(function(){
console.log(1);
testt();
}, 2000)
})()
Ответ 8
Эта проблема обычно возникает, когда вы использовали setTimeout в цикле рекурсии, например, в обратном вызове ajax, и когда вы хотите запустить что-то из рекурсии, вы ожидаете, что setTimeout будет работать как прошлый. не забудьте использовать setInterval в нерекурсивных функциях.