取消所有JavaScript的一个定时器和setIntervals(Cancel all Javas

2019-06-26 02:37发布

什么是取消所有JS的setTimeout,setInterval的和requestAnimationFrame几秒钟的一定量之后的正确方法?

编辑:对不起,我应该更详细地解释! 代码来自要么数据库或一些API,所以无法跟踪超时,英国皇家空军或间隔的ID。 所以,我没有计时器的ID,我可以很容易地你给clearInterval或clearTimeout或cancelAnimationFrame。 我知道我必须使用他们,但我不知道如何让所有的动画的ID(如果有的话)。

Answer 1:

你需要保持每个间隔,超时的ID和requestAnimationFrame您已经创建并调用window.clearInterval(id)等在他们身上。

一个verfy的hackish /蛮力的方式来做到这一点会是这样的:

for (var i = 1; i < 99999; i++) {
    window.clearInterval(i);
    window.clearTimeout(i);
    window.mozCancelAnimationFrame(i); // Firefox
}

但我不会建议。

更新:

到了一定的时间后,做到这一点:

setTimeout(function () {
   for (var i = 1; i < 99999; i++) {
        window.clearInterval(i);
        window.clearTimeout(i);
        window.mozCancelAnimationFrame(i); // Firefox
    }
}, 3000); // After 3 seconds

更新2:

我不相信有比蛮力的方式,如果你不保持每次出去等为基准更好的办法,所以使它有点容易做到这一点(所建议这个苏答案 ),你可以覆盖默认的setInterval:

var intervals = new Array();
window.oldSetInterval = window.setInterval;
window.setInterval = function(func, interval) {
    intervals.push(oldSetInterval(func, interval));
}

// Now you can loop over intervals and clear them 
// one by one when ever you want to.

for (var interval in intervals) {
   window.clearInterval(interval);
}

这个例子说明如何做它setInterval ,但当然可以做的一样setTimeoutrequestAnimationFrame为好。



Answer 2:

你需要获得每个超时(返回值引用setTimeout ),然后使用clearTimeout()那么你希望你取消。 同为的setInterval。



文章来源: Cancel all Javascript's setTimeouts and setIntervals