首页 >web前端 >js教程 >如何在 JavaScript 中创建准确的计时器?

如何在 JavaScript 中创建准确的计时器?

Barbara Streisand
Barbara Streisand原创
2024-12-25 07:19:33160浏览

How Can I Create Accurate Timers in JavaScript?

在 JavaScript 中创建准确的计时器

由于 setTimeout() 和 setInterval( 的不精确性质,在 JavaScript 中确定准确的时间间隔可能具有挑战性).

不准确setTimeout() 和 setInterval()

setTimeout() 和 setInterval() 依赖于浏览器的调度机制,该机制可能受到系统资源和浏览器活动的影响。这种固有的可变性可能会导致不一致和不可靠的计时,如给定的示例所示。

解决方案:使用日期对象

要创建准确的计时器,请考虑使用 Date对象的 now() 方法来检索当前毫秒时间戳。与基于回调的方法相比,这种方法提供了更好的精度。

简单计时器实现:

对于基本计时场景,您可以使用以下方法显式跟踪时间差:

var start = Date.now();
setInterval(function() {
    var delta = Date.now() - start; // milliseconds since start
    ...
    output(Math.floor(delta / 1000)); // in seconds
}, 1000);

此方法跟踪自计时器启动以来的时间差。为了避免潜在的值跳跃,建议更频繁地更新间隔(例如,每 100 毫秒)。

自调整计时器

对于精确、非漂移的间隔,您可以实现自我调整计时器。这些计时器根据实际经过的时间调整每次重复超时的延迟:

var interval = 1000; // ms
var expected = Date.now() + interval;
setTimeout(step, interval);
function step() {
    var dt = Date.now() - expected; // drift
    ...
    expected += interval;
    setTimeout(step, Math.max(0, interval - dt)); // adjust delay for drift
}

这种方法可以监控时间漂移并补偿任何不一致,确保更准确的计时节奏。

以上是如何在 JavaScript 中创建准确的计时器?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn