clearInterval不起作用?肯定是用法不对
1.场景
当一个定时器可能会被多次调用的时候,只清理一次肯定会出现没有清理完全的情况,这时候给你的错觉就是“clearInterval不起作用”。
2.用法
var timer = null;
var timerList = [];
function intervalStart() {
intervalEnd();
timer = window.setInterval(function() {
console.log("开始了")
}, 2000);
timerList.push(timer)
}
function intervalEnd() {
if (timer) {
console.log("结束了");
timerList.forEach((item, index) => {
clearInterval(item);
})
timerList = [];
timer = 0;
}
}
3.注意
HTML5标准规定,setTimeout的最短时间间隔是4毫秒;setInterval的最短间隔时间是10毫秒,也就是说,小于10毫秒的时间间隔会被调整到10毫秒;
实际上,把setTimeout的第二个参数设置为0s,并不是立即执行函数的意思,只是把函数放入异步队列。浏览器先执行完同步队列里的任务,才会去执行异步队列中的任务;
//先输出0,再输出1
setTimeout(function(){
console.log(1);
});
console.log(0);
大多数电脑显示器的刷新频率是60HZ,大概相当于每秒钟重绘60次。因此,最平滑的动画效的最佳循环间隔是1000ms/60,约等于16.6ms;
为了节电,对于那些不处于当前窗口的页面,浏览器会将时间间隔扩大到1000毫秒。另外,如果笔记本电脑处于电池供电状态,Chrome和IE10+浏览器,会将时间间隔切换到系统定时器,大约是16.6毫秒;