Как мне правильно перезапустить тайм-аут в Javascript?

#javascript

#javascript

Вопрос:

У меня есть карусель слайдов, которые я просматриваю с интервалом в 5 секунд. У меня есть функция, которая очищает тайм-аут, чтобы остановить вращение. Я пытаюсь перезапустить карусель с помощью приведенного ниже кода. Поведение работает, но некорректно. Вместо возобновления с интервалом в 5 секунд он быстро мигает через слайды.

 t = setTimeout(carousel, 5000); 
var interval;
$(document).on('mousemove keyup keypress',function(){
    clearTimeout(carousel);
    setTimeout(carousel, 6000);
})
 

Комментарии:

1. Вам нужно использовать clearTimeout(t) . t является идентификатором таймера. Это то, что вы отменяете, а не функцию carousel .

Ответ №1:

Я думаю, вы очищаете тайм-аут для переменной inproper. Согласно документам, это должен быть идентификатор тайм-аута, поэтому:

 t = setTimeout(carousel, 5000); 
$(document).on('mousemove keyup keypress',function(){
    clearTimeout(t);
    t = setTimeout(carousel, 6000);
}
 

Ответ №2:

Вот в чем проблема:

 t = setTimeout(carousel, 5000); 
var interval;
$(document).on('mousemove keyup keypress',function(){
    clearTimeout(t /* instead of carousel */);
    t = setTimeout(carousel, 6000); // also refresh the value of the timeout
})
 

Ответ №3:

Это

     clearTimeout(carousel);
 

неверно. clearTimeout аргумент не является функцией обратного вызова, это идентификатор тайм-аута, возвращаемый setTimeout . Должно быть что-то вроде

 t = setTimeout(carousel, 5000); 

$(document).on(/* some events */,function(){
    clearTimeout(t);
});

$(document).on(/* some other events */,function(){
    t = setTimeout(carousel, 6000);
});