Ответ 1
Это может быть одна из логических, чтобы очистить весь интервал...
for (var i = 1; i < 99999; i++)
window.clearInterval(i);
У меня есть setInterval(), который вызывается в плагине jQuery, но я хочу очистить его с моей главной страницы, где у меня нет доступа к переменной, в которой был сохранен setInterval.
Есть ли способ очистить все таймеры, присутствующие на странице?
Это может быть одна из логических, чтобы очистить весь интервал...
for (var i = 1; i < 99999; i++)
window.clearInterval(i);
Вы можете переопределить setInterval:
window.oldSetInterval = window.setInterval;
window.setInterval = function(func, interval) {
var interval = oldSetInterval(func, interval);
// store it in a array for stopping? stop it now? the power is yours.
}
Нет, вы не можете, не без исходной переменной.
То, как я это достиг, заключается в наличии массива уровня приложения (например, Application.setIntervalIds = []), к которому я нажимаю идентификаторы setInterval, когда он создается. Тогда я могу просто вызвать window.clearInterval(id) для каждого id в массиве, когда мне нужно.
В качестве примера, когда я создаю новый setInterval, я пишу что-то вроде (coffeescript):
id = setInterval (() -> function2call()), timeout
Application.setIntervalIds.push id
И затем у меня есть функция clearAllSetIntervals, которую я могу вызвать при необходимости:
Application.clearAllSetIntervals = () ->
$.each Application.setIntervalIds, (index, id) ->
window.clearInterval id
Ответ
for (var i = 1; i < 99999; i++)
window.clearInterval(i);
был тем, кого я искал. С небольшим усовершенствованием этой очень простой логики я смог сделать что-то вроде этого.
var i = 0;
var rotatorId;
var rotator;
rotator = setInterval(function() {myfunction(), 3000});
rotatorId[i] = rotator;
i++;
if (rotator > 1) {
for(i = 1; i < rotatorId.length; i++){
clearInterval(rotatorId[i]);
}
}
Лучший способ найти...
var clearAllIntervals = function ( ) {
var intervals = [];
$(".elements").each(function() {
intervals.push( setInterval(function() {
}, 1000) );
});
return function clearAll ( ) {
intervals.forEach( clearInterval );
}
}( );
// When you want to clear them:
clearAllIntervals( );