我在setIntervals
函数中使用each()
,如此
$(".elements").each(function() {
setInterval(function() {
}, 1000);
});
显然,为每个元素创建了一个setIntervals。
我的问题是:当我不再需要它时,如何清除所有setIntervals?我已经尝试将setInterval存储在一个变量中并调用window.clearInterval(int)
,但这只会清除最后一个setInterval,因为每个变量都被覆盖了。
答案 0 :(得分:13)
设置间隔时,会得到指向它的指针:
var myInterval = setInterval(function(){}, 4000);
如果要取消间隔,请执行以下操作:
clearInterval(myInterval);
因此,对于您想要做的事情,您将执行以下操作:
var intervals = [];
$(".elements").each(function() {
var i = setInterval(function() {
}, 1000);
intervals.push(i);
});
然后,如果你需要取消它们,你可以这样做:
intervals.forEach(clearInterval);
那应该为你做。
答案 1 :(得分:2)
没有"清除所有间隔"功能
您需要存储所有这些内容并清除所有内容:
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
答案 2 :(得分:1)
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,或者用等效的库或普通循环替换它。
答案 3 :(得分:0)
由于每个区间都与一个元素相关联,因此您可以将区间ID存储在元素中:
$(".elements").each(function() {
$(this).data('interval-id', setInterval(function() {
// ...
}, 1000));
});
然后,如果要清除间隔,
$(".elements").each(function() {
clearInterval($(this).data('interval-id'));
});
答案 4 :(得分:0)
我不建议您使用此解决方案,但它确实可以解决问题。它想要覆盖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)
答案 5 :(得分:0)
这对我有用:
// clear interval
var id = window.setInterval(function() {}, 0);
while (id--) {
window.clearInterval(id);
答案 6 :(得分:0)
设置间隔后,您将获得一个指向它的指针。
要清除所有间隔,您需要存储所有间隔:
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 = [];
})