#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);
});