перезапуск setInterval - PullRequest
       8

перезапуск setInterval

7 голосов
/ 28 июля 2011

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

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

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

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

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

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

Ответы [ 3 ]

5 голосов
/ 28 июля 2011

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

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

    $('a').click(function() {
       clearInterval(intervalID);   
       intervalID = setInterval(rotate, 5000);    
    });
});
4 голосов
/ 28 июля 2011

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

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

3 голосов
/ 28 июля 2011

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

1007 * Вы должны убедиться, что эта переменнаядоступно и имеет общий контекст для обеих функций.Самый простой способ - создать анонимный метод самовызывания вокруг вашего скрипта и объявить эту переменную вне области видимости.
(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));
...