use*_*328 7 javascript jquery animation
在给定的秒数后取消所有JS setTimeout,setInterval和requestAnimationFrame的正确方法是什么?
编辑:对不起,我应该解释更多!代码来自数据库或某些API,因此我无法跟踪超时,raf或间隔ID.所以我没有定时器的ID,我可以很容易地将你的clearInterval或clearTimeout或cancelAnimationFrame.我知道我必须使用它们,但我不知道如何获取所有动画ID(如果有的话).
Chr*_*son 14
你需要保留你创建的每个间隔,超时和requestAnimationFrame的ID,并window.clearInterval(id)在它们上面调用等.
一个简单的hackish /蛮力方式来做到这一点将是这样的:
for (var i = 1; i < 99999; i++) {
window.clearInterval(i);
window.clearTimeout(i);
window.mozCancelAnimationFrame(i); // Firefox
}
Run Code Online (Sandbox Code Playgroud)
但我不建议这样做.
更新:
在一段时间后完成:
setTimeout(function () {
for (var i = 1; i < 99999; i++) {
window.clearInterval(i);
window.clearTimeout(i);
window.mozCancelAnimationFrame(i); // Firefox
}
}, 3000); // After 3 seconds
Run Code Online (Sandbox Code Playgroud)
更新2:
我不相信如果你没有为每次超时等提供参考,那么有比蛮力方式更好的方法,所以为了使它更容易做到(如这个SO答案所示),你可以覆盖默认的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);
}
Run Code Online (Sandbox Code Playgroud)
这个例子说明如何为做到这一点setInterval,但当然可以做以同样的方式setTimeout,并requestAnimationFrame为好.
| 归档时间: |
|
| 查看次数: |
7678 次 |
| 最近记录: |