2012-04-25 51 views
4

我有一个拥有一个JavaScript计时器倒计时的拍卖网站。出于某种原因,15-20分钟后,此计时器滞后实际时间20-30秒。在1小时的过程中,javascript倒数计时器可以关闭至少2-3分钟。这让用户感到困惑,因为他认为还有2-3分钟的拍卖结束。 一旦一个页面加载服务器给出的拍卖剩余时间是2小时内的任何东西& JavaScript从那里开始倒计时。所以我的问题是 1)为什么在20-30分钟后,javascript倒数计时器滞后实际时间几秒到几分钟? 2)我如何确保计时器同步。我不想使用ajax来获取剩余时间,因为有许多其他ajax正在运行。 我的服务器使用Php。如何同步服务器的javascript倒数计时器

回答

8

由于您使用的是setTimeout()setInterval(),因此您的计时器滞后。他们不能被信任。使用Date对象来获取准确的当前时间。

您不需要同步。只需将拍卖结束时间(以UTC为单位)放入日期变量中,然后倒数至此即可。

+0

Hello Bergi。你可以分享一个小代码样本来说明如何做到这一点吗?感谢你的帮助。 – Anita 2012-04-26 13:30:21

+0

http://www.sitepoint.com/creating-accurate-timers-in-javascript/中有一个例子。简而言之:每次使用'Date.now()'计算新的超时时间,知道何时应该发生下一个“嘀嗒”。 – Bergi 2012-04-26 15:14:40

+0

Excellet Bergi。这正是我想要的。非常感谢你。 – Anita 2012-04-27 20:23:05

1
  1. 由于在javascript中发生了许多其他事情,JavaScript时间可能会滞后。很大程度上取决于您的特定计时器实现,但Javascript是单线程的,所以任何其他操作都会延迟您的计时器。

  2. 与服务器同步的唯一方法是发送请求。你不能消除这一点。但是你可以在一些计数之后而不是每次都发送请求。例如,计时器执行时每分钟发送一次AJAX请求进行同步。您可以通过试验找到正确的同步时间。