Подтвердить что ты не робот

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 запускается только один раз.

4b9b3361

Ответ 1

setTimeout должен запускаться только один раз. Вы ищете setInterval.

var loop_handle = setInterval(slide, 3000);

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

  setInterval("slide()", 3000);
//becomes
  setInterval(Function("slide();"), 3000);

Ответ 2

Вы вызываете его только один раз, поэтому он будет выполняться только один раз.

Возможно, вы думаете о "setInterval()".

Когда вы вызываете это, кстати, просто передайте имя функции, а не строку:

setInterval(slide, 3000);

Ответ 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 в нерекурсивных функциях.