取消所有 Javascript 的 setTimeouts 和 setIntervals
Cancel all Javascript's setTimeouts and setIntervals
在
给定的秒数后取消所有JS设置超时,setInterval和requestAnimationFrame的正确方法是什么?
编辑:对不起,我应该解释更多!代码来自数据库或某些API,因此我无法跟踪超时,raf或间隔ID。所以我没有计时器的ID,我可以很容易地清除间隔或清除超时或取消动画帧。我知道我必须使用它们,但我不知道如何获取所有动画 ID(如果有的话)。
你需要保留你创建的每个间隔、超时和requestAnimationFrame的ID,并调用window.clearInterval(id)
等。
一种非常黑客/蛮力的方式来做到这一点是这样的:
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:
如果您不为每个超时等保留引用,我不相信有比蛮力方式更好的方法,因此为了使它更容易做到这一点(如此 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);
}
该示例显示了如何为setInterval
执行此操作,但当然也可以在setTimeout
和requestAnimationFrame
上以相同的方式完成。
您需要
获取对每个超时的引用(返回值 setTimeout
),然后使用 clearTimeout()
然后您希望取消它们。对于设置间隔相同。
相关文章:
- Firebase迁移-简单的Firebase.set没有'不再工作了——旧的还是新的
- Ember Data DS.Model's set函数不起作用
- C#asp.net mvc Set CheckBoxFor已检查的具有Model Value的属性
- 为什么JavaScript可以'找不到给定的InnerHTML并返回Cannot set property
- 无法在基于Cordova的应用程序中读取Set Cookie标头
- 在不兼容的接收器上调用的方法Set.prototype.add未定义
- 为什么可以't我用Set对象调用Array.prototype.map
- Sequelize associations:set[Models]添加新模型,而不是关联现有模型
- 如何使用选项useCSS set true为bxSlider加载onSlideAfter()事件
- Node JS,传统的数据结构?(如Set等),任何类似Java.util的node
- Bootstrap-Datepicker not selecting date when using "set
- Looking for function identical to lodash's [_.set]()
- Angular sqlLite set css url()无法设置相对路径
- Typerror:set 不是带有 angularjs 的函数
- 在使用 findAndModify 时$set运算符中将函数参数作为字段名称传递
- fabric.js:使用 Image.set() 调整图像大小是否会降低图像质量
- jQuery Promises with chained setTimeouts
- dataTransfer.set拖放的数据在chrome中不起作用
- 在 app.locals 上设置属性和调用 app.set() 有什么区别?
- console.log 在 CasperJS 的 set Timeout 评估中不起作用