setTimeout()
中给出的时间延迟对Windows和Ubuntu的工作方式有所不同?
为什么?
有更好的方法吗?
答案 0 :(得分:2)
无法保证setTimeout()中给出的时间。
有几个原因:
我在
写了一篇关于时间的博客文章http://www.codebullets.com/is-time-relative-in-javascript-1365 关于这个话题
更好的方式?
这取决于你想做什么。另请查看RequestAnimationFrame(http://www.paulirish.com/2011/requestanimationframe-for-smart-animating/),也许这适合您。
答案 1 :(得分:1)
requestAnimationFrame
将触发每个监视器VBLANK间隙。
这是一个非常准确的计时器。但是,它每秒触发最多60次,如果您在需要再次呼叫之前花费超过16.7ms的时间预算,则不会非常准确。
如果您的功能在此时间预算范围内运行,requestAnimationFrame
将是最准确的,您可以从Javascript访问。
它的触发方式与setTimeout
几乎相同:
function myLoop() {
//... < 16.7ms to finish work...
requestAnimationFrame(myLoop);
}
注意:您需要在某些浏览器或polyfill中使用前缀(请参阅chris的答案以获取链接)。