取消所有Javascript的setTimeouts和setIntervals

前端之家收集整理的这篇文章主要介绍了取消所有Javascript的setTimeouts和setIntervals前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在给定的秒数后取消所有JS setTimeout,setInterval和requestAnimationFrame的正确方法是什么?

编辑:对不起,我应该解释更多!代码来自数据库或某些API,因此我无法跟踪超时,raf或间隔ID.所以我没有定时器的ID,我可以很容易地将你的clearInterval或clearTimeout或cancelAnimationFrame.我知道我必须使用它们,但我不知道如何获取所有动画ID(如果有的话).

解决方法

您需要保留您创建的每个间隔,超时和requestAnimationFrame的Id,并在它们上调用window.clearInterval(id)等.

一个强有力的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:

如果你没有为每次超时等保留一个参考,我不相信有比蛮力方式更好的方法,所以为了使它更容易做到(如this SO answer所示),你可以覆盖默认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执行此操作,但当然也可以在setTimeout和requestAnimationFrame上以相同的方式完成.

猜你在找的JavaScript相关文章