setInterval计时器延时问题

时间:2023-03-09 02:16:58
setInterval计时器延时问题

计时器延时问题

js计时器


使用setTimeout、setInterval函数时,第二个参数的设置的时间间隔t是自该函数(setTimeout(f1,t)、setInterval(f1,t))被调用时起,经过t毫秒后,f1被加入UI任务队列,但不一定执行,尤其是在期间有其他任务执行时,所以可能会有时间延时。因此使用setInterval函数制作计时器时,会出现延时。

 注意:
javascript在遇到setInterval时足够机智,只有当任务队列中没有该定时器的实例时,才会将定时器代码添加到任务队列中。因此,定时器代码被添加到任务队列的最小时间间隔为指定的时间间隔,即至少需要经过指定的时间间隔interval,定时器才会被添加
setInterval(fun,interval)
  1. var startTime = new Date().getTime();
  2. var count = 0;
  3. /*setInterval(function(){
  4. var i = 0;
  5. while(i++ < 100000000);
  6. }, 0);*/
  7. function fixed() {
  8. count++;
  9. var offset = new Date().getTime() - (startTime + count * 1000);
  10. var nextTime = 1000 - offset;
  11. if (nextTime < 0) nextTime = 0;
  12. setTimeout(fixed, nextTime); //纠正延时
  13. console.log(new Date().getTime() - (startTime + count * 1000));
  14. }
  15. setTimeout(fixed, 1000);