Я использую
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();
И я пытался убить эти интервалы в базу.функция init (), такой:
clearInterval(transitionInterval);
clearInterval(mainInterval);
И такой:
window.oldSetInterval = window.setInterval;
window.setInterval = new function(func, interval) { }
Магазин 'Em в объект. Поскольку вы're только один, что делает эти промежутки времени, и ты знаешь, что они есть, их можно хранить и потом возиться с ними, как вы хотите. Я'd создать объект, выделенный только для этого, что-то вроде:
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);
}
}
};
Ваш первый вопрос может быть
зачем создавать отдельный объект для всего этого?
Ну Ватсон, это's, чтобы сохранить ваш ручной интервалы, связанные с вашим плагином/проект Вдали от посторонних глаз, так что вы выиграли'т возиться с другой периодичностью, установленными в разделе, не относящиеся к вашему плагину.
да, но почему может'т я хранить его внутри базового объекта?
Вы, безусловно, можете, но я думаю, что этот способ намного чище. Он отделяет логику, вы в вашу базу, странная логика.
зачем вы храните интервалов внутри комплект, а не массив?
Быстрее открыть и немного чище код. Вы можете пойти в любую сторону, на самом деле.
Вы могли бы,
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
Таймер Intialize и установить его в качестве объекта window. Окно.myInterval будет содержать идентификатор таймера.
как окно.myInterval = метод setInterval(функция() { консоль.журнал('привет'); }, 1000);`
Чтобы очистить интервал можно записать как
if(window.myInterval != undefined && window.myInterval != 'undefined'){
window.clearInterval(window.myInterval);
alert('Timer cleared with id'+window.myInterval);
}