JavaScript可以開始和停止的倒數計時

antzone發表於2018-02-08

本章節分享一段程式碼例項,它實現了倒數計時效果,並且能夠實現開始和停止的控制。

程式碼例項如下:

[HTML] 純文字檢視 複製程式碼執行程式碼
<!DOCTYPE html>
<html>
<head>
<meta charset=" utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>螞蟻部落</title>
<style>
body, div{
  margin:0;
  padding:0;
}
body{
  color:#fff;
  font:16px/1.5 \5fae\8f6f\96c5\9ed1;
}
#countdown{
  width:300px;
  text-align:center;
  background:#1a1a1a;
  margin:10px auto;
  padding:20px 0;
}
input{
  border:0;
  width:283px;
  height:50px;
  cursor:pointer;
  margin-top:20px;
}
span{
  color:#000;
  width:80px;
  line-height:2;
  background:#fbfbfb;
  border:2px solid #b4b4b4;
  margin:0 10px;
  padding:0 10px;
}
</style>
<script>
window.onload=function (){
  var oCountDown=document.getElementById("countdown");
  var aInput=oCountDown.getElementsByTagName("input")[0];
  var timer=null;
  aInput.onclick=function(){
    this.value=="開始倒數計時"?(timer=setInterval(updateTime,1000),this.value="結束倒數計時")
    :(clearInterval(timer),this.value="開始倒數計時");
  };
  function format(a){
    return a.toString().replace(/^(\d)$/,'0$1')
  }
  function updateTime (){
    var aSpan=oCountDown.getElementsByTagName("span");
    var oRemain=aSpan[0].innerHTML.replace(/^0/,'') * 60
    +parseInt(aSpan[1].innerHTML.replace(/^0/,''));
    if(oRemain<=0){
      clearInterval(timer);
      return
    }
    oRemain--;
    aSpan[0].innerHTML=format(parseInt(oRemain / 60));
    oRemain %= 60;
    aSpan[1].innerHTML=format(parseInt(oRemain));
  }
}
</script>
</head>
<body>
<div id="countdown"> <span>01</span>分鐘<span>40</span>秒
<input type="button" value="開始倒數計時" />
</div>
</body>
</html>

上面的程式碼實現了我們的要求,下面介紹一下它的實現過程。

一.程式碼註釋:

(1).window.onload=function (){},當文件內容完全載入完畢再去執行函式中的程式碼。

(2).var oCountDown=document.getElementById("countdown"),獲取id屬性值為countdown的元素物件。

(3).var aInput=oCountDown.getElementsByTagName("input")[0],獲取第一個input元素,也就是按鈕元素。

(4).var timer=null,用來作為定時器方法的標識。

(5).aInput.onclick=function(){},為按鈕註冊click事件處理函式。

(6).this.value=="開始倒數計時"?(timer=setInterval(updateTime,1000),this.value="結束倒數計時") : (clearInterval(timer),this.value="開始倒數計時"),使用三元運算子來設定按鈕的value屬性值,和開始和停止倒數計時效果。

(7).function format(a){

  return a.toString().replace(/^(\d)$/,'0$1');

},格式化數字,如果是個位數字,前面加0.

(8).function updateTime (){},此函式是實現倒數計時效果的核心。

(9).var aSpan=oCountDown.getElementsByTagName("span"),獲取span元素集合。

(10).var oRemain=aSpan[0].innerHTML.replace(/^0/,'') * 60+parseInt(aSpan[1].innerHTML.replace(/^0/,'')),使用正規表示式將開始的零刪除,並計算出所有時間的秒數。

(11).if(oRemain<=0){

  clearInterval(timer);

  return

},如果剩餘的秒數小於等於零,自然要停止倒數計時效果了,並跳出函式。

(12).oRemain--,秒數減一。

(13).aSpan[0].innerHTML=format(parseInt(oRemain / 60)),計算並顯示分鐘數。

(14).oRemain %= 60,進行求餘運算,算出秒數。

(15).aSpan[1].innerHTML=format(parseInt(oRemain)),顯示秒數。

二.相關閱讀:

(1).getElementsByTagName()參閱document.getElementsByTagName()一章節。

(2).setInterval()參閱setInterval()一章節。

(3).replace()參閱正規表示式replace()函式一章節。

(4).parseInt()參閱javascript parseInt()一章節。

(5).求餘運算可以參閱javascript求餘運算一章節。

相關文章