2009-12-02 2 views
90

Как остановить и начать setInterval?Как остановить «setInterval»

Предположим, у меня есть textarea. Я хочу остановить setInterval на фокусе и перезагрузить setInterval на размытие (с jQuery).

+0

У вас есть пример в: [введите описание ссылки здесь] [1] [1]: http://stackoverflow.com/questions/7483525/pausing-setinterval-when-page-browser-is-out-of-focus –

+11

требуется только один щелчок мышью, чтобы принять ответ. Это помогает другим также видеть правильный ответ среди многих ответов. CLICK – Onimusha

ответ

151

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

$(function() { 
    var timerId = 0; 

    $('textarea').focus(function() { 
    timerId = setInterval(function() { 
     // interval function body 
    }, 1000); 
    }); 

    $('textarea').blur(function() { 
    clearInterval(timerId); 
    }); 

}); 
+5

Я бы предложил добавить 'if (timerId) clearInteral (timerId)' before 'timerId = setInterval' - в противном случае не гарантируется, что интервал будет очищен, если фокус будет вызван чаще, чем размытие. при тестировании я видел эту ситуацию несколько раз (на IE10). –

+0

@PatrickKlug справа! Мне нужно 'if (timerId) clearInteral (timerId)' также – bobbyrne01

18

магазин возвращение setInterval в переменной и использовать его позже, чтобы очистить интервал.

var timer = null; 
$("textarea").blur(function(){ 
    timer = window.setInterval(function(){ ... whatever ... }, 2000); 
}).focus(function(){ 
    if(timer){ 
     window.clearInterval(timer); 
     timer = null 
    } 
}); 
10

setInterval возвращает идентификатор, который можно использовать, чтобы отменить интервал с clearInterval()

+0

, но как я могу реализовать это с $ .live или $ .listen – testkhan

+1

'$ .live' в настоящее время не поддерживает события' focus' и 'blur'. –

22

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

$(function() { 
    var timerId = 0; 

    $('textarea').focus(function() { 
    clearInterval(timerId); 
    }); 

    $('textarea').blur(function() { 
    timerId = setInterval(function() { 
    //some code here 
    }, 1000); 
    }); 
}); 
Смежные вопросы