2011-11-07 49 views
2

我正在構建一些東西,其中一個是倒數計時器,倒計時將永遠不會超過一個小時,所以我需要做的只是倒計時分鐘和秒鐘。JavaScript/jQuery的倒計時與JSfiddle例子?

我有它的部分工作,但問題是與前導零。我在秒鐘內完成了工作,但與分鐘無關。

看看我的例子http://jsfiddle.net/cgweb87/GHNtk/

的JavaScript

setInterval(function() { 
var timer = $('span').html(); 
timer = timer.split(':'); 
var minutes = timer[0]; 
var seconds = timer[1]; 
seconds -= 1; 
if (minutes < 0) return; 
if (minutes < 10 && length.minutes != 2) minutes = '0' + minutes; 
if (seconds < 0 && minutes != 0) { 
    minutes -= 1; 
    seconds = 59; 
} 
else if (seconds < 10 && length.seconds != 2) seconds = '0' + seconds; 
    $('span').html(minutes + ':' + seconds); 
}, 1000); 

HTML

<span>10:10</span> 

我希望發生的就是倒數計時器可根據1小時任何地方開始,它將以前導零點數倒數,即以這種格式;

08:49 46:09

,當它到達倒數只是簡單地顯示:

00:00

感謝您的任何投入,我不希望使用插件,我想學習它。

+3

我認爲你想'minutes.length'而不是'length.minutes'。 'length.seconds'一樣。然後,如果你重新排序它的聲明,它的作品是完美的:http://jsfiddle.net/GHNtk/1/ –

+0

好的,謝謝你會試試這個,很容易使我仍然在學習:) – cgweb87

回答

9

setInterval返回一個身份,你可以在以後使用clearInterval

var interval = setInterval(function() { 
    /* snip */ 
    $('span').html(minutes + ':' + seconds); 

    if (parseInt(minutes, 10) == 0 && parseInt(seconds, 10) == 0) 
     clearInterval(interval); 
}, 1000); 

,爲避免日益增加分鐘 - 00000001:42 - 無論是:在

  1. 變化length.minutesminutes.length您前綴測試。
  2. 檢索時將數值轉換爲數字 - var minutes = parseInt(timer[0], 10); - 僅測試if (minutes < 10) ...

拍攝選項#2,這裏是一個更新:http://jsfiddle.net/BH8q9/

+0

感謝您的更詳細的解釋! – cgweb87

+0

如果倒數計時器結束,使用clearInterval會停止代碼的運行嗎? – cgweb87

+0

@ cgweb87是的,它應該防止和刪除任何進一步的時間間隔。 –

1

檢查一個字符串的長度,它不是

length.minutes length.seconds

minutes.length seconds.length

1

對您的代碼進行一些簡單的改變,它的工作原理如你所願:

setInterval(function() { 
    var timer = $('span').html(); 
    timer = timer.split(':'); 
    var minutes = timer[0]; 
    var seconds = timer[1]; 
    seconds -= 1; 
    if (minutes < 0) return; 
    if (seconds < 0 && minutes != 0) { 
     minutes -= 1; 
     seconds = 59; 
    } 
    else if (seconds < 10 && length.seconds != 2) seconds = '0' + seconds; 
    if ((minutes < 10) && ((minutes+'').length < 2)) minutes = '0' + minutes; 
    $('span').html(minutes + ':' + seconds); 
}, 1000); 

我移動了if((分鐘< 10).... line down在分鐘後發生 - = 1;否則在9:59,你不會得到額外的0.另外length.minutes是錯誤的方式,它需要是minutes.length - 但要確保它被視爲一個字符串(它有一個長度,而一個號碼不),我給它添加了一個空白字符串,然後把這個長度..這是什麼((minutes+'').length < 2(確保你有領先的零)..這是真正實現它的最好方法,但它是與您現有的代碼最接近。

1

據我所知,答案已被接受,但想在我的2C拋出:我想,以避免額外的編碼只要有可能。使用Jonathan Lonowski的方法,我會改進它:

var interval = setInterval(function() { 
    var timer = $('span').html().split(':'); 
    //by parsing integer, I avoid all extra string processing 
    var minutes = parseInt(timer[0],10); 
    var seconds = parseInt(timer[1],10); 
    --seconds; 
    minutes = (seconds < 0) ? --minutes : minutes; 
    if (minutes < 0) clearInterval(interval); 
    seconds = (seconds < 0) ? 59 : seconds; 
    seconds = (seconds < 10) ? '0' + seconds : seconds; 
    minutes = (minutes < 10) ? '0' + minutes : minutes; 
    $('span').html(minutes + ':' + seconds); 
}, 1000);