清除所有 setIntervals
Clear all setIntervals
我在 each()
函数中使用 setIntervals
,就像这样
$(".elements").each(function() {
setInterval(function() {
}, 1000);
});
显然为每个元素创建了一个 setIntervals。
我的问题是:当我不再需要它们时,如何清除所有的 setIntervals?我尝试将 setInterval 存储在一个变量中并调用 window.clearInterval(int)
,但这只会清除最后一个 setInterval,因为每个变量都被覆盖了。
没有"clear-all-intervals"函数。
您需要存储所有这些,并清除所有:
var ints = [];
$(".elements").each(function() {
ints.push( setInterval(function() {
}, 1000)
);
});
// later
for ( var i = 0; i < ints.length; ++i )
clearInterval( ints[i] );
ints = []; // and forget them
设置间隔时,您会得到一个指向它的指针:
var myInterval = setInterval(function(){}, 4000);
如果要取消间隔,请执行以下操作:
clearInterval(myInterval);
因此,对于您想做的事情,您可以执行以下操作:
var intervals = [];
$(".elements").each(function() {
var i = setInterval(function() {
}, 1000);
intervals.push(i);
});
然后如果你需要全部取消它们你可以这样做:
intervals.forEach(clearInterval);
这应该适合你。
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( );
如果您希望与 IE8 或更低版本兼容,您应该 shim .forEach,或者用等效的库或普通循环替换它。
由于每个间隔都与一个元素相关联,因此您可以将间隔 ID 存储在元素中:
$(".elements").each(function() {
$(this).data('interval-id', setInterval(function() {
// ...
}, 1000));
});
那么,如果你想清除区间,
$(".elements").each(function() {
clearInterval($(this).data('interval-id'));
});
我不建议您使用此解决方案,但它确实可以解决问题。覆盖 setInterval 函数以收集所有指向 setInterval 的链接的想法:
(function(originalSetInterval){
var intervals = [];
window.setInterval = function(func, timeout) {
var newInterval = originalSetInterval(func, timeout);
intervals.push(newInterval);
return newInterval;
}
window.clearAllIntervals = function() {
intervals.forEach(clearInterval);
}
})(window.setInterval)
为了做得更好,您还需要覆盖 clearInterval 以删除所有已清除的间隔:
(function(originalSetInterval, originalClearInterval){
var intervals = [];
window.setInterval = function(func, timeout) {
var newInterval = originalSetInterval(func, timeout);
intervals.push(newInterval);
return newInterval;
}
window.clearInterval = function(interval) {
originalClearInterval(interval);
intervals.splice(intervals.indexOf(interval), 1)
}
window.clearAllIntervals = function() {
intervals.forEach(clearInterval);
}
})(window.setInterval, window.clearInterval)
这对我有用:
// clear interval
var id = window.setInterval(function() {}, 0);
while (id--) {
window.clearInterval(id);
设置间隔时,您会得到一个指向它的指针。
要清除所有间隔,您需要存储所有间隔:
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 = [];
})
我在 each()
函数中使用 setIntervals
,就像这样
$(".elements").each(function() {
setInterval(function() {
}, 1000);
});
显然为每个元素创建了一个 setIntervals。
我的问题是:当我不再需要它们时,如何清除所有的 setIntervals?我尝试将 setInterval 存储在一个变量中并调用 window.clearInterval(int)
,但这只会清除最后一个 setInterval,因为每个变量都被覆盖了。
没有"clear-all-intervals"函数。
您需要存储所有这些,并清除所有:
var ints = [];
$(".elements").each(function() {
ints.push( setInterval(function() {
}, 1000)
);
});
// later
for ( var i = 0; i < ints.length; ++i )
clearInterval( ints[i] );
ints = []; // and forget them
设置间隔时,您会得到一个指向它的指针:
var myInterval = setInterval(function(){}, 4000);
如果要取消间隔,请执行以下操作:
clearInterval(myInterval);
因此,对于您想做的事情,您可以执行以下操作:
var intervals = [];
$(".elements").each(function() {
var i = setInterval(function() {
}, 1000);
intervals.push(i);
});
然后如果你需要全部取消它们你可以这样做:
intervals.forEach(clearInterval);
这应该适合你。
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( );
如果您希望与 IE8 或更低版本兼容,您应该 shim .forEach,或者用等效的库或普通循环替换它。
由于每个间隔都与一个元素相关联,因此您可以将间隔 ID 存储在元素中:
$(".elements").each(function() {
$(this).data('interval-id', setInterval(function() {
// ...
}, 1000));
});
那么,如果你想清除区间,
$(".elements").each(function() {
clearInterval($(this).data('interval-id'));
});
我不建议您使用此解决方案,但它确实可以解决问题。覆盖 setInterval 函数以收集所有指向 setInterval 的链接的想法:
(function(originalSetInterval){
var intervals = [];
window.setInterval = function(func, timeout) {
var newInterval = originalSetInterval(func, timeout);
intervals.push(newInterval);
return newInterval;
}
window.clearAllIntervals = function() {
intervals.forEach(clearInterval);
}
})(window.setInterval)
为了做得更好,您还需要覆盖 clearInterval 以删除所有已清除的间隔:
(function(originalSetInterval, originalClearInterval){
var intervals = [];
window.setInterval = function(func, timeout) {
var newInterval = originalSetInterval(func, timeout);
intervals.push(newInterval);
return newInterval;
}
window.clearInterval = function(interval) {
originalClearInterval(interval);
intervals.splice(intervals.indexOf(interval), 1)
}
window.clearAllIntervals = function() {
intervals.forEach(clearInterval);
}
})(window.setInterval, window.clearInterval)
这对我有用:
// clear interval
var id = window.setInterval(function() {}, 0);
while (id--) {
window.clearInterval(id);
设置间隔时,您会得到一个指向它的指针。
要清除所有间隔,您需要存储所有间隔:
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 = [];
})