setInterval计时器不准的问题解决方法__第1页
setInterval计时器不准的问题解决方法__第2页
setInterval计时器不准的问题解决方法__第3页
setInterval计时器不准的问题解决方法__第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、setInterval计时器不准的问题解决方法_ 在js中假如准备用法setInterval进行倒数,计时等功能,往往是不精准的,由于setInterval的回调函数并不是到时后立刻执行,而是等系统计算资源空闲下来后才会执行.而下一次触发时间则是在setInterval回调函数执行完毕之后才开头计时,所以假如setInterval内执行的计算过于耗时,或者有其他耗时任务在执行,setInterval的计时会越来越不准,延迟很厉害. 下面的代码可以说明这个问题 代码如下: var startTime = new Date().getTime(); var count = 0; /耗时任务 set

2、Interval(function() var i = 0; while(i+ 100000000); , 0); setInterval(function() count+; console.log(new Date().getTime() - (startTime + count * 1000); , 1000); 代码里输出了setInterval触发时间和应当正确触发时间的延迟毫秒数 代码如下: 176 340 495 652 807 961 1114 1268 1425 1579 1734 1888 2048 2201 2357 2521 2679 2834 2996 . 可以看到延

3、迟是越来越严峻的. 为了在js里可以用法相对精准的计时功能,我们可以 代码如下: var startTime = new Date().getTime(); var count = 0; setInterval(function() var i = 0; while(i+ 100000000); , 0); function fixed() count+; var offset = new Date().getTime() - (startTime + count * 1000); var nextTime = 1000 - offset; if (nextTime 0) nextTime =

4、 0; setTimeout(fixed, nextTime); console.log(new Date().getTime() - (startTime + count * 1000); setTimeout(fixed, 1000); 代码里,通过1000(也就是周期时间)减去当前时间和精准时间的差距,来算出下次触发的时间,从而修正了当前触发的延迟. 下面是输出 代码如下: 186 200 230 271 158 899 900 899 900 899 899 899 902 899 418 202 232 266 145 174 192 214 242 268 149 179 214

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论