我正在使用
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) { }
答案 0 :(得分:56)
将em存储在对象中。由于你是唯一一个制作这些间隔的人,并且你知道它们是什么,你可以存储它们,然后随意弄乱它们。我会创建一个专门用于此目的的对象,例如:
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);
}
}
};
您的第一个问题可能是
为什么要为此单独创建一个对象?
Watson,这是为了让你的插件/项目的手工间隔远离窥探,所以你不会弄乱在与你的插件无关的页面中设置的其他间隔。
是的,但为什么我不能将它存储在基础对象中?
你当然可以,但我认为这种方式更清洁。它将您在基础中执行的逻辑与奇怪的超时逻辑分开。
为什么要将间隔存储在Set而不是数组中?
访问速度更快,代码更简洁。你可以去任何一种方式,真的。
答案 1 :(得分:42)
你可以这样做,
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 :(得分:8)
初始化计时器并将其设置为窗口对象。 Window.myInterval 将保留计时器的ID。
喜欢window.myInterval = setInterval(function() { console.log('hi'); }, 1000);
要清除Interval,您可以像
一样编写if(window.myInterval != undefined && window.myInterval != 'undefined'){
window.clearInterval(window.myInterval);
alert('Timer cleared with id'+window.myInterval);
}
答案 3 :(得分:0)
设置间隔后,您将获得一个指向它的指针。 要清除所有间隔,您需要存储所有间隔:
// Initially
var arr = [];
arr.push(setInterval(function () {
console.log(1);
}, 1000));
arr.push(setInterval(function () {
console.log(2);
}, 1000));
arr.push(setInterval(function () {
console.log(3);
}, 1000));
以下循环将清除所有间隔
// Clear multiple Intervals
arr.map((a) => {
console.log(a)
clearInterval(a);
arr = [];
})