перезапуск метода setInterval

поэтому у меня есть таймер, который вращает набор изображений за 5 секунд. Поэтому я запускаю это при запуске документа.

$(document).ready(function() {
var intervalID=setInterval(function(){ 
     rotate();    
}, 5000);
});

Функция Rotate просто просто вращает изображения. Однако я также разрешаю пользователю вручную выбирать, на какое изображение они смотрят. Из-за этого мне нужно отменить SetInterval, а затем снова запустить его через 5 секунд

то, что я пытаюсь сделать, это отменить интервал, а затем начать его снова, выполнив это

$('a').click(function(){
 clearInterval(intervalID);   
 intervalID=setInterval(function(){ 
     rotate();    
}, 5000);    
});

однако код, похоже, не сбрасывает интервал, как я надеялся.

3 ответов


просто сделать intervalID быть глобальной переменной, объявив ее вне и выше всех функций.

С вашим текущим кодом его область действия ограничена $(document).ready() метод, поэтому это может вызвать проблему, которую вы описываете.


Если intervalID переменная объявляется в пределах .ready() объем, следующее должно работать (непроверенных):

$(document).ready(function() {
    var rotate = function() { ... },
        intervalID = setInterval(rotate, 5000);

    $('a').click(function() {
       clearInterval(intervalID);   
       intervalID = setInterval(rotate, 5000);    
    });
});

Ну, похоже, вы объявляете interverID локально в анонимной функции из вашего .ready() обработчик. Мне на самом деле интересно, почему вы не сталкиваетесь с ссылка ошибка в вашем обработчике событий click-event, так как intervalID не может быть известна.

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

(function _myPrivateContext($, window, document, undefined) {
    var intervalID = null;

    $(document).ready(function() {
       intervalID = setInterval(rotate, 5000);
    });

    $('a').click(function(){
        clearInterval(intervalID);   
        intervalID = setInterval(rotate, 5000);    
    });

}(jQuery, window, document));