zoukankan      html  css  js  c++  java
  • JS中setTimeout()的使用方法具体解释


     1. SetTimeOut()

                 1.1 SetTimeOut()语法样例

                 1.2 用SetTimeOut()运行Function

                 1.3 SetTimeOut()语法样例

                 1.4 设定条件使SetTimeOut()停止

                 1.5 计分及秒的counter

       2. ClearTimeout()

       3.  Set Flag  

     


    10.1 setTimeout( )

      setTimeout( ) 是屬於 window 的 method, 但我們都是略去 window 這頂層物件名稱, 這是用來設定一個時間, 時間到了, 就會執行一個指定的 method。請先看下面一個簡單, 這是沒有實際用途的样例, 仅仅是用來示範 setTimeout( ) 的語法。

     

    1. setTimeout( ) 語法样例

     

    練習-69 等候三秒才執行的 alert( )

      在 第 3 章 說到 alert 對話盒, 通常是用按鈕叫出來, 在這練習, 你會看到網頁開啟後 3 秒, 就會自動出現一個 alert 對話盒。

    1. 請用瀏覽器開啟示範磁碟中的 timeout1.htm, 這檔案有下面內容:

    <html> <body bgcolor=lightcyan text=red>
    <h1> <font color=blue>
    示範網頁 </font> </h1> <p> </br>
    <p>
    請等三秒!

    <script>
    setTimeout("alert('
    對不起, 要你久候')", 3000 )
    </script>

    </body> </html>

    2. 留意網頁開啟後三秒, 就會出現一個 alert 對話盒。

     

      setTimeout( ) 是設定一個指定等候時間 (單位是千分之中的一个秒, millisecond), 時間到了, 瀏覽器就會執行一個指定的 method 或 function, 有下面語法:

      今次样例是設定等 3 秒 (3000 milliseconds), 瀏覽器就會執行 alert( ) 這一個method。

     

    2. 用 setTimeout( ) 來執行 function

      setTimeout( ) 一般是與 function 一起使用, 下面是一個較上個練習複雜的样例。

    練習-70 狀態列中自動消失的文字

      在練習-20, 你看過怎样用按鈕在狀態列顯示文字, 然後再用按鈕消除文字, 在這練習, 你看到怎样用按鈕在狀態列顯示文字, 而這文字會在三秒後自動消失。

    1. 請用瀏覽器開啟示範磁碟中的 timeout2.htm, 這檔案有下面內容:

    <html> <body bgcolor=lightcyan text=red>
    <h1> <font color=blue>
    示範網頁 </font> </h1> <p> </br>

    <script>
    function
    clearWord( )
    { window.status="" }
    </script>

    <form>
    <input type="button" value="
    在狀態列顯示文字"
      onClick="window.status='
    Hello' , setTimeout('clearWord( )', 3000) ">
    </form>
    </body> </html>

    2. 請在按鈕上按一下, 你應見到狀態列出現 Hello 這字, 留意過了三秒, 這字就會消失。

     

    1. 這處先設定一個名為 clearWord( ) 的 function, 作下面定義:

    window.status=""

      這是用來消除狀態列的文字 (請看練習-20 的說明), 瀏覽器執行 clearWord( ) , 就會消除狀態列的文字。

    2. 今次按鈕設定了啟動下面兩項工作, 用 , 分隔, 瀏覽器會順序執行這兩項工作:

    onClick="window.status='Hello' , setTimeout('clearWord( )', 3000) "

    3. 今次的 setTimeout( ) 有下面設定:

      這是設定等 3 秒 (3000 milliseconds) 瀏覽器就會執行 clearWord( ) 這一個function。

      在第 2 章, 你看過怎样使到父視窗開啟時自動開啟一個子視窗, 若觀看者不關閉這子視窗, 這子視窗就會一路開啟。看過以上的練習, 請你設計一個會開啟子視窗的網頁, 而這子視窗在開啟後兩秒, 就會自動關閉。

     

    3. 不斷重複執行的 setTimeout( )

      setTimeout( ) 預設仅仅是執行一次, 但我們能够使用一個循環方式, 使到一個setTimeout( ) 再啟動自己一次, 就會使到第二個 setTimeout( ) 執行, 第二個又啟動第三個, 這樣循環下去, 這 setTimeout( ) 就會不斷執行。

     

    練習-71 自動每秒加 1 的 function

      在這練習, 你看到怎样使用 setTimeout( ) 令文字框的數值每秒就加 1, 當然你也能够設定其它遞增的速度, 比如每五秒就加 5, 或每五秒就加 1。

    1. 請用瀏覽器開啟示範磁碟中的 timeout3.htm, 這檔案有下面內容:

    <html> <head>
    <script>
    x =
    0
    function
    countSecond( )
    { x = x+1
      document.fm.
    displayBox.value=x
      setTimeout("
    countSecond( )", 1000)
    }
    </script> </head>
    <body bgcolor=lightcyan text=red> <p> </br>

    <form name=
    fm>
    <input type="text" name="
    displayBox" value="0" size=4 >
    </form>

    <script>
    countSecond( )
    </script>

    </body> </html>

    2. 網頁開啟後, 請你留意文字框中的數值轉變。

    3. 請你將這檔案複製去硬碟, 更改一些設定, 比如 x = x+5, 或將等候時間改為5000, 看有什麼反應

     

    1. 這網頁有兩個 script, 第一個是設定 countSecond( ) 這個 function, 第二個在後的是在網頁全然載入後, 就啟動這 function。

    2. 留意今次下面的設定:

    function countSecond( )
    { 
    x = x+1
      document.
    fm.displayBox.value = x
      setTimeout("
    countSecond( )", 1000)
    }

      當 countSecond( ) 啟動後, 就會啟動 setTimeout( ), 這個 method 在一秒後又啟動 countSecond( ), countSecond( ) 啟動後又啟動 setTimeout( ) , 所以得出的結果是 countSecond( ) 每秒執行一次。

    3. 在 JavaScript, 我們是使用這處說的方法使到一些事項不斷執行, 当中一個用途是顯示轉動時間, 还有一個用途是設定跑動文字, 隨後的章節會有样例。

      用上述的方法設定時間, setTimeout( ) 雖然設定了是一秒, 但瀏覽器還有另外兩項功能要執行, 所以一個循環的時間是稍多於一秒, 比如一分鐘可能仅仅有58 個循環

     

    4. 設定條件使 setTimeout( ) 停止

      setTimeout( ) 的迴圈开始後, 就會不斷重複, 在上個練習, 你看到文字框的數字不斷跳動, 但我們是有方法使到數字跳到某一個數值就停下來, 当中一個方法是用 if...else 設定一個條件, 若是 TRUE 就繼續執行 setTimeout( ) , 若是 FALSE 就停止。

      比如要使到上個練習的 counter 跳到 20 就停下, 可將有關的 function 作下面的更改。

    function countSecond( )
    { if (
    x < 20 )
       { 
    x = x + 1
         document.
    displaySec.displayBox.value = x
         setTimeout("
    countSecond( )", 1000)
          }
    }

     

    5. 計分及計秒的 counter

      在前面的練習, 相信你已學識怎样使用 setTimeout( ), 現在請你看一個較複習的样例。

     

    練習-72 計時的 counter

      在這練習, 你要設定兩個文字框, 一個顯示分鐘, 还有一個顯示秒, 網頁開啟後, 就會在這兩個文字框中自動計時。

    1. 請用瀏覽器開啟示範磁碟中的 timeout4.htm, 這檔案有下面內容:

    <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 bgcolor=lightcyan text=red> <p> </br>

    <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>

    2. 請你留意兩個文字框中的數字轉變。

     

    1. 這網頁有兩個 function, 一個用來計分鐘, 一個用來計秒。在這處, 筆者仅仅是示範setTimeout( ) 的操作, 因為計時器有其它更精簡的寫法。(留意: 這方式的計時並不準確。)

    2. 留意計秒的 function:

    function countSec( )
    { 
    x = x + 1
      z
    = x % 60
      document.
    displaySec.displayBox.value=z
      setTimeout("
    countSec( )", 1000

    }

      這處的 % 符號是 modulus (餘數), 比如 z = x % 60 表示先進行 x / 60, 得出的餘數作為 z 這變數, 比如 82 秒, modulus 就是 22, 所以文字框會顯示 22 而不是 82。

    3. 若你要將單位數字在前加上 0, 比如 01, 02, 03 等, 可用下面方法:

    function countSec( )
    { 
    x = x + 1
      z =
    x % 60
      if (
    z < 10) { z = "0" + z }
      document.
    displaySec.displayBox.value=z
      setTimeout("
    countSec( )", 1000)
    }

     

     


    10.2 clearTimeout( )

      在前一節, 你看過怎样使用 setTimeout( ) 來使到瀏覽器不斷執行一個 function, 當一個 setTimeout( ) 开始了循環的工作, 我們要使它停下來, 可使用 clearTimeout( ) 這 method。

      clearTimout( ) 有下面語法: clearTimeout(timeoutID)

      要使用 clearTimeout( ), 我們設定 setTimeout( ) 時, 要給予這 setTimout( ) 一個名稱, 這名稱就是 timeoutID , 我們叫停時, 就是用這 timeoutID來叫停, 這是一個自訂名稱, 但非常多程式員就以 timeoutID 為名。

      在以下的样例, 筆者設定兩個 timeoutID, 分別命名為 meter1meter2, 例如以下:

    timeoutID
     ↓
    meter1 = setTimeout("count1( )", 1000)
    meter2 = setTimeout("count2( )", 1000)

      使用這 meter1meter2 這些 timeoutID 名稱, 在設定 clearTimeout( ) 時, 就可指定對哪一個 setTimeout( ) 有效, 不會擾及还有一個 setTimeout( ) 的操作。

     

    練習-73 可停止的 setTimeout( )

      這練習以練習-71 為藍本, 但作了兩個改變: (1) 有兩個 setTimeout( ), (2) 有兩個按鈕, 分別可停止這兩個 setTimout( )

    1. 請用瀏覽器開啟示範磁碟中的 clear.htm, 這檔案有下面內容:

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

    function count1( )
    { 
    x = x + 1
      document.
    display1.box1.value = x
      meter1
    =setTimeout("count1( )", 1000)
    }

    function count2( )
    { 
    y = y + 1
      document.
    display2.box2.value = y
      meter2
    =setTimeout("count2( )", 1000)
    }
    </script> </head>

    <body bgcolor=lightcyan text=red> <p> </br>

    <form name=
    display1>
    <input type="text" name="
    box1" value="0" size=4 >
    <input type=button value="
    停止計時" onClick="clearTimeout(meter1) " >
    <input type=button value="
    繼續計時" onClick="count1( ) " >
    </form>
    <p>
    <form name=
    display2>
    <input type="text" name="
    box2" value="0" size=4 >
    <input type=button value="
    停止計時" onClick="clearTimeout(meter2) " >
    <input type=button value="
    繼續計時" onClick="count2( ) " >
    </form>

    <script>
    count1( )
    count2( )
    </script>

    </body> </html>

    2. 留意網頁中的兩個文字框及內裡變動的數字, 每個文字框旁有兩個按鈕, 請你試試兩個按鈕的反應

    3. 請你連續按多次 [繼續計時] 的按鈕, 留意數值的跳動加快了, 原因是每按一次就啟動 function 一次, 每個 function 都令數值跳動, 比如啟動同一的 function 四次, 就會一秒跳四次。(請看下一節)

     

     


    10.3 Set flag

      前個練習說到我們用一個按鈕來啟動一個 function, 每按一下就會啟動這 function 一次, 請看下面样例。

     

    練習-74 效果重複的 setTimeout( )

      這練習實際是將 練習-73 簡化, 仅仅有一個計時器, 筆者想示範的是每按 [繼續計時] 一次, 就會啟動 count( ) 這 function 一次。

    1. 請用瀏覽器開啟示範磁碟中的 flag1.htm, 這檔案有下面內容:

    <html> <head>
    <script>
    x=0
    function
    count( )
    { 
    x = x + 1
      document.
    display.box.value= x
      timeoutID
    =setTimeout("count( )", 1000)
    }
    </script> </head> <body bgcolor=lightcyan text=red> <p> </br>
    <form name=
    display>
    <input type="text" name="
    box" value="0" size=4 >
    <input type=button value="
    停止計時" onClick="clearTimeout(timeoutID) " >
    <input type=button value="
    繼續計時" onClick="count( ) " >
    </form> <p>

    <script>
    count( )
    </script>
    </body> </html>

    2. 網頁開啟後, 你應見到文字框中的數字跳動, 請你按四次 [繼續計時], 留意這會加快數字跳動, 原因是有關的 function 被開啟了多個, 每個都會使數字轉變。

    3. 按了四次 [繼續計時] 的按鈕後, 請你按 [停止計時] 的按鈕, 你會發現要按五次才干停止數字跳動。

     

      在編寫程式時, 我們常要提防使用者作出一些特別動作, 比如使用者按兩次 [繼續計時] 按鈕, 這計時器就失準了。我們是否有辦法使到一個按鈕被按一次就失效呢? 這就不會產生重複效果。

      筆者藉這處的样例 (隨後還有多個样例), 解說程式中一個 set flag (設定旗標) 的概念, flag 是一個記認, 一般來說, 這能够是 0 或是 1 (也可用 on 或 off, 或不论什么兩個自選的名稱或數字), 但也能够是 2、3、4 或更大的數字, 在這样例有下面設定:

    1. 程式開啟時 flag=0。

    2. 當 counter( ) 執行時會順便將 flag 變為 1。

    3. 在 [繼續計時] 這按鈕的反應中, 會先檢查 flag 是 0 或是 1, 若是 0 就會產生作用, 若是 1 就沒有反應。

    4. 使用這 flag 的方式, count( ) 這 function 開啟後, [繼續計時] 這按鈕就沒有作用。

     

      這處的 flag 是一個變數, 可随意取名, 我們用 flag來稱呼這變數的原因, 是因為這變數好處一支旗, 將旗豎起 (flag is on), 就會產生一個作用, 將旗放下 (flag is off), 就產生还有一個作用。

     

    練習-75 仅仅可開啟一次的 function

      這練習是將上個練習加多一個 flag, 使到每次仅仅能有一個 count( ) 這 function 在進行。

    1. 請用瀏覽器開啟示範磁碟中的 flag2.htm, 這檔案有下面內容:

    <html> <head>
    <script>
    x = 0
    flag = 0
    function
    count( )
    { 
    x = x + 1
      document.
    display.box.value = x
      timeoutID
    =setTimeout("count( )", 1000)
      flag
    = 1
    }

    function restart( )
    { if (
    flag==0)
       { 
    count( ) }
    }
    </script> </head>

    <body bgcolor=lightcyan text=red> <p> </br>
    <form name=
    display>
    <input type="text" name="
    box" value="0" size=4 >
    <input type=button value="
    停止計時"
      onClick="clearTimeout(
    timeoutID); flag=0 " >
    <input type=button value="
    繼續計時" onClick="restart( ) " >
    </form> <p>

    <script>
    count( )
    </script>

    <form>
    <input type=button value="
    Show flag"
    onClick="alert('
    The flag now is '+ flag) " >
    </form>
    </body> </html>

    2. 在網頁中, 你應見到三個按鈕及文字框中的數字跳動。

    3. 請你按 [Show flag] 這按鈕, 應見到一個話對盒顯示 flag 是 1。

    4. 請你按 [停止計時] 這按鈕, 數字停止跳動, 請你按 [Show flag] 這按鈕, 應見到話對盒顯示 flag 是 0。

    5. 請你按多次 [繼續計時] 這按鈕, 你應見到數字不會加快, 請你按 [Show flag] 這按鈕, 應見到話對盒顯示 flag 變回 1。

     

    1. 這網頁第 4 行有這一句: flag=0 , 這是設定 flag 這變數及將初始值定為 0, 你也可將初始值定為 1, 隨後有關的 0 和 1 對調。

    2. count( ) 這 function 最後一句是 flag=1 , 所以啟動 count( ) 後, flag 就會變為 1。

    3. [繼續計時] 的按鈕是用來啟動 restart( ), 這 function 有下面設定:

    function restart( )
    { if (
    flag==0
       { 
    count( ) }
    }

      這處的 if statement 檢查 flag 是否等於 0, 若是 0 就啟動 count( ), 若是 1 (即不是 0) 就沒有反應, 使用這方法, 若 count( ) 已在執行中, [繼續計時] 這按鈕不會有作用。

      這處的 flag=1 設定, 實際設為 1 或 2 或 3 等數值都是一樣的, 仅仅要不是 0 就能够了, 所以這兩個相對的旗標, 看似是 "0" 和 "1", 實際是 "0" 和 "non-zero" (非-0)。

    4. [停止計時] 的按鈕有下面設定:

    onClick="clearTimeout(timeoutID); flag=0 "

      這是停止 setTimeout( ) 的操作時, 同時將 flag 轉回 0, 這使到 restart( ) 這 function 能够又一次啟動 count( )

     



     


  • 相关阅读:
    使用CustomValidate自定义验证控件
    C#中金额的大小写转换
    Andriod出错之Unable to build: the file dx.jar was not loaded from the SDK folder!
    VC 编写的打字练习
    机房工作笔记Ping只有单向通
    web服务协同学习笔记(1)
    Dll 学习3 将MDI子窗口封装在DLL中
    机房工作学习文件共享
    Andriod出错之Failed to find an AVD compatible with target 'Android 2.2'
    Andriod出错之wrapper was not properly loaded first
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/3789936.html
Copyright © 2011-2022 走看看