2016-12-30 110 views
0

我試圖做一個簡單的計時器在JS開始在25分鐘,並倒計時。分鐘/秒倒數計時器沒有滴答?

$(document).ready(function() { 
 
\t  updateClock(); 
 
\t  var timeInterval = setInterval(updateClock(), 1000); 
 
    }); 
 

 
    var ms = 1500000; 
 
    var minutes = Math.floor(ms/1000/60); 
 
    var seconds = Math.floor((ms/1000) % 60); 
 

 
    function updateClock() { 
 
\t  ms -= 1000; 
 
\t  if (ms <= 0) { 
 
\t \t  clearInterval(timeInterval); 
 
\t  }; 
 
\t  $('#minutes').html(minutes); 
 
\t  $('#seconds').html(seconds); 
 
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="minutes"></div> 
 
\t <div id="seconds"></div>

我想不通爲什麼頁面僅顯示25和0,永不蜱下來。我錯誤地使用setInterval()嗎?

+0

嘗試:'setInterval(updateClock,1000)' – Dale

+0

試過了,仍然沒有工作;無論如何感謝您的建議。 – gridproquo

+2

你沒有更新'updateClock()'內的分鐘和秒的值 – ochi

回答

8

您需要計算updateClock()函數中minutesseconds的值。目前,它們不會從初始值更新。

而且,設定的時間間隔時,不要括號添加到函數名稱,否則它只是簡單地傳遞到返回值的引用,而不是函數本身:

var timeInterval; 
 
    
 
$(document).ready(function() { 
 
    updateClock(); 
 
    timeInterval = setInterval(updateClock, 1000); 
 
}); 
 

 
var ms = 1500000; 
 

 
function updateClock() 
 
{ 
 
    ms -= 1000; 
 
    
 
    var minutes = Math.floor(ms/1000/60), 
 
     seconds = Math.floor((ms/1000) % 60); 
 
    
 
    if (ms <= 0) 
 
    { 
 
     clearInterval(timeInterval); 
 
    }; 
 
    
 
    $('#minutes').html(minutes); 
 
    $('#seconds').html(seconds); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="minutes"></div> 
 
<div id="seconds"></div>

+0

感謝您的幫助!你能否解釋一下關於不再爲括號添加括號的部分? 「它只是將參考傳遞給返回值」是什麼意思? – gridproquo

+0

沒問題:如果在'setInterval()'的函數名稱內部添加括號,Javascript會將該函數的**返回值**傳遞給'setInterval',而不是每'x'毫秒調用一次該函數。 – BenM

3

您忘記了再次更新分鐘和秒鐘。

function updateClock() { 
    ms -= 1000; 
    if (ms <= 0) { 
     clearInterval(timeInterval); 
    }; 
    minutes = Math.floor(ms/1000/60); 
    seconds = Math.floor((ms/1000) % 60); 
    $('#minutes').html(minutes); 
    $('#seconds').html(seconds); 
}