什么是取消所有JS的setTimeout,setInterval的和requestAnimationFrame几秒钟的一定量之后的正确方法?
编辑:对不起,我应该更详细地解释! 代码来自要么数据库或一些API,所以无法跟踪超时,英国皇家空军或间隔的ID。 所以,我没有计时器的ID,我可以很容易地你给clearInterval或clearTimeout或cancelAnimationFrame。 我知道我必须使用他们,但我不知道如何让所有的动画的ID(如果有的话)。
什么是取消所有JS的setTimeout,setInterval的和requestAnimationFrame几秒钟的一定量之后的正确方法?
编辑:对不起,我应该更详细地解释! 代码来自要么数据库或一些API,所以无法跟踪超时,英国皇家空军或间隔的ID。 所以,我没有计时器的ID,我可以很容易地你给clearInterval或clearTimeout或cancelAnimationFrame。 我知道我必须使用他们,但我不知道如何让所有的动画的ID(如果有的话)。
你需要保持每个间隔,超时的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
,但当然可以做的一样setTimeout
和requestAnimationFrame
为好。
你需要获得每个超时(返回值引用setTimeout
),然后使用clearTimeout()
那么你希望你取消。 同为的setInterval。