setTimeout / clearTimeout проблемы

Я пытаюсь сделать страницу для движения в начальную страницу после, например, 10 секунд неактивности (пользователь, не нажимающий куда угодно). Я использую jQuery для остальных, но устанавливанием/очищением в моей тестовой функции является чистый JavaScript.

В моей фрустрации я закончил с чем-то вроде этого функция, что я надеялся, что мог обратиться, любой нажимает на страницу. Таймер запускается прекрасный, но не сбрасывается при щелчке. Если функция будет вызвана 5 раз в течение первых 10 секунд, то 5 предупреждений не появятся... никакой clearTimeout...

function endAndStartTimer() {
    window.clearTimeout(timer);
    var timer;
    //var millisecBeforeRedirect = 10000; 
    timer = window.setTimeout(function(){alert('Hello!');},10000); 
}

Кто-либо получил некоторые строки кода, которые добьются цели? - на любой остановке щелчка, сбросе и запускают таймер. - Когда таймер совершает нападки, например, 10 секунд делают что-то.

94
задан Mark Fox 8 July 2013 в 05:03
поделиться

3 ответа

Вам необходимо объявить таймер вне функции. В противном случае вы получите новую переменную при каждом вызове функции.

var timer;
function endAndStartTimer() {
  window.clearTimeout(timer);
  //var millisecBeforeRedirect = 10000; 
  timer = window.setTimeout(function(){alert('Hello!');},10000); 
}
208
ответ дан 24 November 2019 в 05:59
поделиться

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

Вам нужно сохранить его, вы можете поместить его вне функции или, если вы не хотите, чтобы переменная была глобальной, вы можете сохранить ее в закрытии , например:

var endAndStartTimer = (function () {
  var timer; // variable persisted here
  return function () {
    window.clearTimeout(timer);
    //var millisecBeforeRedirect = 10000; 
    timer = window.setTimeout(function(){alert('Hello!');},10000); 
  };
})();
46
ответ дан 24 November 2019 в 05:59
поделиться

Это потому, что таймер является локальной переменной к вашей функции.

Попробуйте создать его вне функции.

15
ответ дан 24 November 2019 в 05:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: