2013-02-20 358 views
0

我正在研究一個簡單的HTML和Javascript項目;我的計時器有問題。每隔幾秒只在setInterval函數內執行一次代碼

我正在計算兩個Date()對象之間的秒數;每2秒鐘,我想獲得一個新的隨機數。我有一個每100毫秒運行一次的setInterval,當我超過2秒標記時,if語句中的代碼應該運行。

所以我的問題是:
我怎樣才能確保代碼在if聲明的是,每運行100毫秒內setInterval()每執行2秒只有一次?

下面是代碼:

var startTime = new Date(); 
var endTime = new Date(); 

var randomNumber = 0; 

var gameTimer = setInterval(function(){ 
    //calculate seconds; 
    var secondsPassed = Math.round((endTime - startTime)/1000); 

    if(modulo(secondsPassed,2) == 0){ 
     //when the "gate" is open this keep executing every 100 mili seconds. 
     //but i want it to execute only once every 2 seconds. 
     randomNumber = Math.floor(Math.random()*lanes.length); 
     $(lanes[randomNumber]).append(box); 
    } 

    endTime = new Date(); 
}, 100); 

var modulo = function (n, m) { 
    var remain = n % m; 
    return Math.floor(remain >= 0 ? remain : remain + m); 
}; 
+0

我不知道你問這裏有什麼... – Neal 2013-02-20 21:20:10

+2

爲什麼不乾脆放棄2000而不是100的setInterval的持續時間? – DiMono 2013-02-20 21:21:39

+0

因爲我想爲它增加更多的東西,運行速度更快,然後2000毫秒和endTime不會刷新足夠快。 – samy 2013-02-20 21:22:40

回答

3

,我認爲你所要求的雙間隔定時器。

var interval = 100, beat = 2000, ticks = 0; 
var timer = setInterval(function(){ 
    runsEvery100ms(); // ««« Code here runs every 100 ms. 
    if (ticks > 0 && ticks % beat === 0) { 
     runsEvery2000ms(); // ««« Code here runs every 2000 ms. 
     ticks = 0; 
    } 
    ticks += interval; 
}, interval); 

Demo Fiddle here.

+0

謝謝你,因爲我的英文不好,很難說明我想做什麼。但你明白了!再次非常感謝:) – samy 2013-02-21 20:22:10

+0

沒問題。別客氣。 – 2013-02-21 23:25:12

相關問題