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

问题描述:

我制作了倒数计时器。它使用日期函数来获取当前时间。然后它将这段时间存储在另一个变量中。这个新的var变成小时/分钟/秒,所以格式应该和日期函数相同。在倒数计时器脚本中跳过了很多秒

然后我把这两个变量都计算在内,以毫秒计算。 然后我从新日期事件中减去当前日期,以毫秒为单位从两个变量中获得时间差。这应该是从当前时间到目标时间的差异。

在此之后,我会将差异变成可读的小时/分钟/秒时间格式,它将显示在div中。还添加了一段代码,以允许闪烁的倒数计时器,如果计时器用完,将会给予5分钟的额外时间。 (这个倒数计时器应该是一个更大的脚本的一部分,服务)

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

试图使一些计算更小,甚至读取很多关于javascript的setTimeout和setInterval漂移,但这并不能解释我目前的问题。 (使用setTimeout进行聊天,每500毫秒重新载入邮件,这就像一个魅力,所以我的电脑/客户端/服务器可以处理小于1000毫秒时间)

跳过秒发生在IE和Firefox上。其他倒计时定时器(我不希望他们这样做)也能在我的浏览器中正常运行。这里有什么问题?!?

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

在这个例子中,速度被设置为100ms

实际的问题是你舍入和数学,而不是在显示代码本身。

如果你改变你的显示行:

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

它会显示当前的时间,你会看到秒计数均匀,即使你的计算数字挺举和滞后。

+0

检查,是的,你是正确的。 (新的Date())部分不会滞后。所以......我该如何修正数学部分......哪里都出错了。 – Pietertje

+0

那......我不知道。你最好的办法是将timeToHumanReadable代码拆分出来,并且创建一个独立于UI代码的小型独立函数,你可以开发和测试它。给它一个值并确保你获得正确的值。 –

+0

我已经构建了这段代码,显示了每一步。这一切都很顺利,直到我循环,并注意到滞后。它似乎确实是以计算为导向的......试图用一些更快的计算来代替math.floor。在计算中改变了一些其他的东西,但我似乎无法加速。所以......我将把它变成PHP,看看那是怎么回事。 (由于日期函数更容易计算,所以计算应该更简单),我会将您的答案标记为好,因为您指出问题不在于函数被解雇的数量。 – Pietertje