在倒数计时器脚本中跳过了很多秒

Lots of seconds get skipped in countdown timer script

我做了一个倒数计时器。它使用日期函数来获取当前时间。然后它将那个时间存储在另一个 var 中。这个新变量已更改 hours/minutes/seconds,因此格式应与日期函数相同。

那我把这两个变量都变成自计数以来的时间,单位是毫秒。 然后我从新日期中减去当前日期,以毫秒为单位从两个变量中获取时间差。这应该是当前时间与目标时间的时差。

在此之后,我会将差异转换为可读的 hours/minutes/seconds 时间格式,并将显示在 div 中。还添加了一段代码以允许闪烁的倒计时计时器,如果计时器 运行 结束,它将提供 5 分钟的额外时间。 (这个倒数计时器应该是一个更大的脚本的一部分,做事情)

大问题是:定时器工作。做我想让它做的一切。但是非常卡!它会跳过显示秒数,即使我将 setTimeout 设置为 10 毫秒。我还使用了一个使用相同计时器设置(不同变量)的时钟,并且该时钟不会跳过任何时间,setTimeout 为 1000 毫秒...

试图使一些计算更小,甚至阅读了很多关于 javascript 中的 setTimeout 和 setInterval 漂移的内容,但这并不能解释我当前的问题。 (使用 setTimeout 进行聊天,每 500 毫秒重新加载一次消息,这就像一个魅力,所以我的 computer/client/server 可以处理小于 1000 毫秒的时间)

跳秒发生在 IE 和 firefox 上。在我的浏览器中,其他倒数计时器(它们不按照我的意愿行事)也 运行 正常。这里有什么问题?!?

https://jsfiddle.net/77cnvq82/ function startMyFunction() { setTimeout(myFunction, 100); }

本例中速度设置为100ms

实际问题出在您的舍入和数学运算上,而不是显示代码本身。

如果您将显示行更改为:

timerShowRemaining = timerShowRemaining+timerHours+":"+timerMinutes+":"+timerSeconds
 + (new Date());

它会显示当前时间,您会看到秒数均匀增加,即使您计算的数字有偏差和滞后。