Как очистить все интервалы?
я использую
varName = setInterval(function() { ... }, 1000);
установить пару интервалов в плагине jquery, который я пишу, но когда плагин перезагружен, мне нужно очистить эти интервалы. Я попытался хранить их в переменных, например:
(function($){
$.mosaicSlider = function(el) {
var base = this;
var transitionInterval, mainInterval;
...
base.init = function() {
mainInterval = setInverval(function() { ... }, 1000);
}
base.grid = function() {
this.transition() = function() {
transitionInterval = setInterval(function(...) {
}
}
base.init();
И я попытался убить эти интервалы в функции base.init(), например:
clearInterval(transitionInterval);
clearInterval(mainInterval);
А вот так:
window.oldSetInterval = window.setInterval;
window.setInterval = new function(func, interval) { }
Ответы
Ответ 1
Вы могли бы сделать,
var interval_id = window.setInterval("", 9999); // Get a reference to the last
// interval +1
for (var i = 1; i < interval_id; i++)
window.clearInterval(i);
//for clearing all intervals
Ответ 2
Храните их в объекте. Поскольку вы делаете эти интервалы только вы и знаете, что это такое, вы можете хранить их, а потом связываться с ними по своему усмотрению. Я бы создал объект, предназначенный только для этого, что-то вроде:
var interval = {
// to keep a reference to all the intervals
intervals : new Set(),
// create another interval
make(...args) {
var newInterval = setInterval(...args);
this.intervals.add(newInterval);
return newInterval;
},
// clear a single interval
clear(id) {
this.interals.delete(id);
return clearInterval(id);
},
// clear all intervals
clearAll() {
for (var id of this.intervals) {
this.clear(id);
}
}
};
Ваш первый вопрос может быть
Зачем делать отдельный объект только для этого?
Ну что ж, Уотсон, чтобы ваши ручные интервалы, связанные с вашим плагином/проектом, не попадали под любопытные глаза, поэтому вы не будете связываться с другими интервалами, установленными на странице, не связанной с вашим плагином.
Да, но почему я не могу хранить его внутри базового объекта?
Вы наверняка можете, но я думаю, что этот способ намного чище. Он разделяет логику, которую вы делаете в своей базе, со странной логикой тайм-аута.
Почему вы хранили интервалы внутри набора, а не массива?
Более быстрый доступ и немного более чистого кода. Вы можете пойти любым путем, правда.
Ответ 3
Запустите Таймер и установите его как объект окна. Window.myInterval будет содержать идентификатор таймера.
например, window.myInterval = setInterval(function() { console.log('hi'); }, 1000);
Чтобы очистить интервал вы можете написать как
if(window.myInterval != undefined && window.myInterval != 'undefined'){
window.clearInterval(window.myInterval);
alert('Timer cleared with id'+window.myInterval);
}
Ответ 4
Это решение должно быть сделано в полном объеме: например, апелляция по решению суда:
if(typeof(val) == 'v' != undefined){
clearInterval(v);
}
v=setInterval(function(){ FONCTION A AXECUTER TOUTES LES SECONDES }, 1000);
Dans La Fonction Applée Sur Onmouseout:
if(typeof(val) == 'v' != undefined){
clearInterval(v);
}
Testé sur plusieurs штурман, новый никель!