2012-04-25 90 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請求進行同步。您可以通過試驗找到正確的同步時間。