1. 程式人生 > >JavaScript——setTimeout()製作簡易計時器

JavaScript——setTimeout()製作簡易計時器

不得不說,setTimeout()是一個非常神奇的東西,我們可以用它來掌控時間,從而達到意想不到的結果。

這裡先看一下setTimeout()的定義。 

定義和用法

setTimeout() 方法用於在指定的毫秒數後呼叫函式或計算表示式。

提示: 1000 毫秒= 1 秒。

 說白了,setTimeout()的作用就是用來設定一個時間, 時間到了, 就會執行一個指定的 method。

下面是setTimeout()方法的使用合集。

1.  延時彈框

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>

<body>
<p>請等待三秒鐘</p>

<script>
setTimeout("alert('hello,讓您久等啦!')",3000)
</script>

</body>
</html>

開啟網頁,等待3000ms,即3s後,彈框。

當然,我們也可以通過按鈕來喚出彈窗。

<body>

<p>點選按鈕,進行載入。</p>
<button onclick="myFunction()">點我</button>

<script>
var myVar;

function myFunction() {
    myVar = setTimeout(alertFunc, 3000);
}

function alertFunc() {
  alert("載入成功!");
}
</script>

</body>

執行情況如下:

2.開啟一個新視窗,等待幾秒後關閉該視窗。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>

<script>
var myWindow = window.open("", "", "width=200, height=100");
myWindow.document.write("<p>這是一個新視窗'</p>");
myWindow.document.write("<p>本視窗將在3秒後關閉'</p>");
setTimeout(function(){ myWindow.close() }, 3000);
</script>


</body>
</html>

執行結果如下:

3秒後該視窗關閉。

3. 計數器

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>

<button onclick="startCount()">開始計數!</button>
<input type="text" id="txt">
<button onclick="stopCount()">停止計數!</button>

<p>點選 "開始計數!" 按鈕開始執行計數程式。</p>
<p>輸入框從 0 開始計算。 </p>
<p>點選 "停止計數!" 按鈕停止後,可以再次點選點選 "開始計數!" 按鈕會重新開始計數。</p>

<script>
var c = 0;
var t;
var timer_is_on = 0;

function timedCount() {
    document.getElementById("txt").value = c;
    c = c + 1;
    t = setTimeout(function(){ timedCount() }, 1000);
//一秒鐘呼叫幾次timedCount函式,即每秒計數一次
}

function startCount() {
    if (!timer_is_on) {
        timer_is_on = 1;//判斷條件
        timedCount();
    }
}

function stopCount() {
    clearTimeout(t);
    timer_is_on = 0;//判斷條件
}
</script>

</body>
</html>

這段程式碼最主要的是語句塊是

function timedCount()
 {
    document.getElementById("txt").value = c;
    c = c + 1;
    t = setTimeout(function(){ timedCount() }, 1000);
    //一秒鐘呼叫幾次timedCount函式,即每秒計數一次
}

timedCount函式中呼叫了setTimeout函式,通過setTimeout函式呼叫自己,而延時設定為1000,即1s,這樣就達到了每秒計時的功能。

效果如下

當然,我們真正的計時器都是會區分分鐘和秒鐘的,因此我們可以設定一個判斷條件,通過if語句來限制它,如

function timedCount( )
{ if ( x < 60 )
   { x = x + 1
     document.getElementById("txt").value = c;
        c = c + 1;
        t = setTimeout(function(){ timedCount() }, 1000);
        //一秒鐘呼叫幾次timedCount函式,即每秒計數一次
  }
}

這樣的話,我們就可以做一個稍微複雜一點的計時器。程式碼如下:

<html> 
<head>
<script>
x=0
y=-1

function countMin( )
{ y=y+1
  document.displayMin.displayBox.value=y
  setTimeout("countMin( )",60000)
}

function countSec( )
{ x = x + 1
  z =x % 60
  document.displaySec.displayBox.value=z
  setTimeout("countSec()", 1000)
}
</script>
</head>

<body> 


<table> <tr valign=top> <td> 你在本網頁的連線時間是:</td>

<td> <form name=displayMin>
<input type="text" name="displayBox"value="0" size=4 >
</form> </td>
<td> 分 </td>

<td> <form name=displaySec></td>
<td> <input type="text" name="displayBox"value="0" size=4 >
</form> </td>
<td> 秒。</td> </tr> </table>

<script>
countMin( )
countSec( )
</script>
</body>
</html>

這網頁有兩個 script, 第一個是設定countSec( ) 和countMin()這兩個 function, 第二個在後的是在網頁完全載入後, 就啟動這兩個function。這個計時器並不是通過進位來實現的。countMin()函式設定六十秒後+1,countSec()函式每秒+1,這樣達到計時的效果。

執行效果如下:

這個事簡易的計時器,如果大家想更細緻一些,可以在這個基礎上新增功能。