2016-02-13 64 views
1

我製作了倒數計時器。它使用日期函數來獲取當前時間。然後它將這段時間存儲在另一個變量中。這個新的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

回答

0

實際的問題是你舍入和數學,而不是在顯示代碼本身。

如果你改變你的顯示行:

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

它會顯示當前的時間,你會看到秒計數均勻,即使你的計算數字挺舉和滯後。

+0

檢查,是的,你是正確的。 (新的Date())部分不會滯後。所以......我該如何修正數學部分......哪裏都出錯了。 – Pietertje

+0

那......我不知道。你最好的辦法是將timeToHumanReadable代碼拆分出來,並且創建一個獨立於UI代碼的小型獨立函數,你可以開發和測試它。給它一個值並確保你獲得正確的值。 –

+0

我已經構建了這段代碼,顯示了每一步。這一切都很順利,直到我循環,並注意到滯後。它似乎確實是以計算爲導向的......試圖用一些更快的計算來代替math.floor。在計算中改變了一些其他的東西,但我似乎無法加速。所以......我將把它變成PHP,看看那是怎麼回事。 (由於日期函數更容易計算,所以計算應該更簡單),我會將您的答案標記爲好,因爲您指出問題不在於函數被解僱的數量。 – Pietertje