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