有没有比setTimeout更精确的创建Javascript计时器的方法?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (25)

一直困扰着我的东西是setTimeout()Javascript中的方法是多么的不可预测。

根据我的经验,在很多情况下计时器是非常不准确的。由于不准确,我的意思是实际的延迟时间似乎多少会变化250-500毫秒。虽然这不是一个大量的时间,但在使用它来隐藏/显示UI元素时,可能会显而易见。

是否有任何技巧可以使setTimeout()执行准确(无需使用外部API)?

提问于
用户回答回答于

停止使用setTimeout()实现“一个定时器”设计,使用实时时钟来平滑UI操作。

用户回答回答于

可以使用系统时钟来补偿计时器不准确性。如果你运行一个定时函数作为一系列setTimeout调用。每个实例调用下一个,然后你要做的所有事情就是精确地确定它的准确度,并从下一次迭代中减去这个差异:

var start = new Date().getTime(),  
    time = 0,  
    elapsed = '0.0';  
function instance()  
{  
    time += 100;  
    elapsed = Math.floor(time / 100) / 10;  
    if(Math.round(elapsed) == elapsed) { elapsed += '.0'; }  
    document.title = elapsed;  
    var diff = (new Date().getTime() - start) - time;  
    window.setTimeout(instance, (100 - diff));  
}  
window.setTimeout(instance, 100);  

这种方法将使漂移最小化,并将不准确度降低90%以上。

扫码关注云+社区