javascript定时器,取消定时器,及js定时器优化方法

 

启动定时器:

 

window.setInterval(Method,Time)  

 

Method是定时调用的js方法

Time是间隔时间,单位是毫秒

取消定时器:

 

clearInterval(Method);



那么问题来了。用 clearInterval(timerid);来清除,往往不能马上停止,用什么方法比较好解决?

优化方案如下

  1. var timeout = false; //启动及关闭按钮

  2. function time()

  3. {

  4. if(timeout) return;

  5. Method();

  6. setTimeout(time,100); //time是指本身,延时递归调用自己,100为间隔调用时间,单位毫秒

  7. }

 

总结
一般不用setInterval,而用setTimeout的延时递归来代替interval。
setInterval会产生回调堆积,特别是时间很短的时候。  

// HTML5标准规定,setTimeout的最短时间间隔是4ms;setInterval的最短间隔时间是10ms,所以,小于了最短的时间间隔会被调整到最短时间间隔

原文:https://blog.csdn.net/johnstrive/article/details/42216005

原文:https://www.cnblogs.com/daysme/p/6428439.html 

setInterval:

// 使用setInterval()时,定时器代码可能在代码再次被添加到队列之前还没有完成执行,导致定时器代码连续执行了多次,但之间没有任何停顿。

// javascript引擎的解决方式就是:使用setInterval()时,仅当没有该定时器的任何其他代码实例时,才将定时器代码添加到执行队列中,确保

// 定时器代码加入到队列中的最小时间间隔为指定间隔但这也会导致两个问题:1.某些间隔被跳过2.多个定时器的代码执行之间的间隔可能比预期的小

setTimeout:

// 使用链式模式调用setTimeout() ,函数执行的时候都会创建一个新的定时器。第二个setTimeout()调用当前执行的函数,并为其设置另外一个定时器。

// 使得在前一个定时器代码执行完之前,不会向队列插入新的定时器代码,确保不会有任何缺失的间隔。而且,它可以保证在下一次定时器代码执行之前,至少要等待指定的间隔,避免了连续的运行

例子:

setTimeout(function fn() {

console.log('我是setTimeout输出的');

setTimeout(fn, 1000);

}, 1000)

js清除未知定时器的方法

.定义全局变量,通过js遍历清除 
这种方法在项目中所使用到的定时器必须赋值记录到定义好的全局变量中,实现模拟代码如下:

 

var pageTimer = {} ; //定义计算器全局变量
//赋值模拟
pageTimer["timer1"] = setInterval(function(){},2000);
pageTimer["timer2"] = setInterval(function(){},2000);
//全部清除方法
for(var each in pageTimer){
    clearInterval(pageTimer[each]);
}

你可能感兴趣的:(js)