2012-06-26 40 views
1
var i = 3400; 

function progress() { 
    i = 34000; 
    window.setInterval(function() { 
     i = i - 100; 
     document.getElementById("progress").firstChild.data = i; 
    }, 100); 
} 

此代碼變得越來越快。函數進度每3秒調用一次,但我無法更改它的調用,因爲它是基於事件的。大約10次電話後,我變得消極了!每次運行後Javascript倒計時速度都會加快

+4

這裏的問題是您多次調用進度,然後調用setInterval來啓動多個計時器。這樣你每3秒就會產生一次間隔。所以9秒後,你有3個間隔運行,15秒後你有5個等。也許發佈一些更多的細節,你到底想要達到什麼目的。 –

+0

我有一些滑動圖像,並在動畫完成時調用方法。我想有時間直到下一張圖片會滑動。 – niklas

+0

首先,你不檢查你的倒計時是否達到零,也許你應該這樣做,並停止時間間隔。其次,爲什麼不要在倒計時結束時調用該函數? –

回答

1

由於進度被稱爲每3秒,你需要以避免它重複創建新的區間。無論何時您撥打進度,使用clearTimeout都會重置計時器。但是,如果不知道你想要達到什麼目的,很難提供準確的答案。

var timeout; 

function counter(count) { 

    document.getElementById("progress").firstChild.data = count; 

    if (count >= 0) { 
     timeout = window.setTimeout(function() { 
      counter(count-100); 
     }, 100); 
    } 
} 

function progress() { 
    window.clearTimeout(timeout); 
    counter(3400); 
} 
3

嗯....

不要使用setInterval

你可能想使用setTimeout

0

試試這個

var i = 3400; 

function progress() { 
    i = i - 100; 
    document.getElementById("progress").firstChild.data = i; 
    window.setTimeout('progress();', 100); 
} 
+0

不解決問題相同的行爲; – niklas

+0

間隔太短,以至於在第一個完成之前執行下一個進度。嘗試將進度時間增加到1000 – PraveenVenu

相關問題