StevenBot-Saltsam

          眼睛能裝下世界,為何卻裝不下眼淚? 一只風(fēng)箏一輩子只為一根線冒險。 那不是一場游戲,為何總有一根線牽著心懷,隱隱作疼? 那不是一段邂逅,為何飄在橋上的影子,總纏進(jìn)夢鄉(xiāng)? 那不是一個夢境,為何你的溫柔私語,總是不經(jīng)意的響起?

          導(dǎo)航

          <2011年10月>
          2526272829301
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          統(tǒng)計

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          datas link

          OSChinal Sources codes Library

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          JS中setTimeout()的用法詳解

          1. SetTimeOut()

                       1.1 SetTimeOut()語法例子

                       1.2 用SetTimeOut()執(zhí)行Function

                       1.3 SetTimeOut()語法例子

                       1.4 設(shè)定條件使SetTimeOut()停止

                       1.5 計分及秒的counter

             2. ClearTimeout()

             3.  Set Flag   

           


          10.1 setTimeout( )

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

           

          1. setTimeout( ) 語法例子

           

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

            在 第 3 章 說到 alert 對話盒, 一般是用按鈕叫出來, 在這練習(xí), 你會看到網(wǎng)頁開啟後 3 秒, 就會自動出現(xiàn)一個 alert 對話盒。

          1. 請用瀏覽器開啟示範(fàn)磁碟中的 timeout1.htm, 這檔案有以下內(nèi)容:

          <html> <body bgcolor=lightcyan text=red>
          <h1> <font color=blue> 
          示範(fàn)網(wǎng)頁 </font> </h1> <p> </br>
          <p> 
          請等三秒!

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

          </body> </html>

          2. 留意網(wǎng)頁開啟後三秒, 就會出現(xiàn)一個 alert 對話盒。

           

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

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

           

          2. 用 setTimeout( ) 來執(zhí)行 function

            setTimeout( ) 通常是與 function 一起使用, 以下是一個較上個練習(xí)複雜的例子。

          練習(xí)-70 狀態(tài)列中自動消失的文字

            在練習(xí)-20, 你看過如何用按鈕在狀態(tài)列顯示文字, 然後再用按鈕消除文字, 在這練習(xí), 你看到如何用按鈕在狀態(tài)列顯示文字, 而這文字會在三秒後自動消失。

          1. 請用瀏覽器開啟示範(fàn)磁碟中的 timeout2.htm, 這檔案有以下內(nèi)容:

          <html> <body bgcolor=lightcyan text=red>
          <h1> <font color=blue> 
          示範(fàn)網(wǎng)頁 </font> </h1> <p> </br>

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

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

          2. 請在按鈕上按一下, 你應(yīng)見到狀態(tài)列出現(xiàn) Hello 這字, 留意過了三秒, 這字就會消失。

           

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

          window.status=""

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

          2. 今次按鈕設(shè)定了啟動以下兩項工作, 用 , 分隔, 瀏覽器會順序執(zhí)行這兩項工作:

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

          3. 今次的 setTimeout( ) 有以下設(shè)定:

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

            在第 2 章, 你看過如何使到父視窗開啟時自動開啟一個子視窗, 若觀看者不關(guān)閉這子視窗, 這子視窗就會一路開啟。看過以上的練習(xí), 請你設(shè)計一個會開啟子視窗的網(wǎng)頁, 而這子視窗在開啟後兩秒, 就會自動關(guān)閉。

           

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

            setTimeout( ) 預(yù)設(shè)只是執(zhí)行一次, 但我們可以使用一個循環(huán)方式, 使到一個setTimeout( ) 再啟動自己一次, 就會使到第二個 setTimeout( ) 執(zhí)行, 第二個又啟動第三個, 這樣循環(huán)下去, 這 setTimeout( ) 就會不斷執(zhí)行。

           

          練習(xí)-71 自動每秒加 1 的 function

            在這練習(xí), 你看到如何使用 setTimeout( ) 令文字框的數(shù)值每秒就加 1, 當(dāng)然你也可以設(shè)定其他遞增的速度, 例如每五秒就加 5, 或每五秒就加 1。

          1. 請用瀏覽器開啟示範(fàn)磁碟中的 timeout3.htm, 這檔案有以下內(nèi)容:

          <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. 網(wǎng)頁開啟後, 請你留意文字框中的數(shù)值轉(zhuǎn)變。

          3. 請你將這檔案複製去硬碟, 更改一些設(shè)定, 例如 x = x+5, 或?qū)⒌群驎r間改為5000, 看有什麼反應(yīng)

           

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

          2. 留意今次以下的設(shè)定:

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

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

          3. 在 JavaScript, 我們是使用這處說的方法使到一些事項不斷執(zhí)行, 其中一個用途是顯示轉(zhuǎn)動時間, 另一個用途是設(shè)定跑動文字, 隨後的章節(jié)會有例子。

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

           

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

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

            例如要使到上個練習(xí)的 counter 跳到 20 就停下, 可將有關(guān)的 function 作以下的更改。

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

           

          5. 計分及計秒的 counter

            在前面的練習(xí), 相信你已學(xué)識如何使用 setTimeout( ), 現(xiàn)在請你看一個較複習(xí)的例子。

           

          練習(xí)-72 計時的 counter

            在這練習(xí), 你要設(shè)定兩個文字框, 一個顯示分鐘, 另一個顯示秒, 網(wǎng)頁開啟後, 就會在這兩個文字框中自動計時。

          1. 請用瀏覽器開啟示範(fàn)磁碟中的 timeout4.htm, 這檔案有以下內(nèi)容:

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

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

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

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

          <table> <tr valign=top> <td> 
          你在本網(wǎng)頁的連線時間是: </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. 請你留意兩個文字框中的數(shù)字轉(zhuǎn)變。

           

          1. 這網(wǎng)頁有兩個 function, 一個用來計分鐘, 一個用來計秒。在這處, 筆者只是示範(fàn)setTimeout( ) 的操作, 因?yàn)橛嫊r器有其他更精簡的寫法。(留意: 這方式的計時並不準(zhǔn)確。)

          2. 留意計秒的 function:

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

          }

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

          3. 若你要將單位數(shù)字在前加上 0, 例如 01, 02, 03 等, 可用以下方法:

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

           

           


          10.2 clearTimeout( )

            在前一節(jié), 你看過如何使用 setTimeout( ) 來使到瀏覽器不斷執(zhí)行一個 function, 當(dāng)一個 setTimeout( ) 開始了循環(huán)的工作, 我們要使它停下來, 可使用clearTimeout( ) 這 method。

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

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

            在下面的例子, 筆者設(shè)定兩個 timeoutID, 分別命名為 meter1 及 meter2, 如下:

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

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

           

          練習(xí)-73 可停止的 setTimeout( )

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

          1. 請用瀏覽器開啟示範(fàn)磁碟中的 clear.htm, 這檔案有以下內(nèi)容:

          <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="
          繼續(xù)計時" 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="
          繼續(xù)計時" onClick="count2( ) " >
          </form>

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

          </body> </html>

          2. 留意網(wǎng)頁中的兩個文字框及內(nèi)裡變動的數(shù)字, 每個文字框旁有兩個按鈕, 請你試試兩個按鈕的反應(yīng)

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

           

           


          10.3 Set flag

            前個練習(xí)說到我們用一個按鈕來啟動一個 function, 每按一下就會啟動這 function 一次, 請看以下例子。

           

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

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

          1. 請用瀏覽器開啟示範(fàn)磁碟中的 flag1.htm, 這檔案有以下內(nèi)容:

          <html> <head>
          <script>
          x=0
          function 
          count( )
          { 
          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="
          繼續(xù)計時" onClick="count( ) " >
          </form> <p>

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

          2. 網(wǎng)頁開啟後, 你應(yīng)見到文字框中的數(shù)字跳動, 請你按四次 [繼續(xù)計時], 留意這會加快數(shù)字跳動, 原因是有關(guān)的 function 被開啟了多個, 每個都會使數(shù)字轉(zhuǎn)變。

          3. 按了四次 [繼續(xù)計時] 的按鈕後, 請你按 [停止計時] 的按鈕, 你會發(fā)現(xiàn)要按五次才能停止數(shù)字跳動。

           

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

            筆者藉這處的例子 (隨後還有多個例子), 解說程式中一個 set flag (設(shè)定旗標(biāo)) 的概念, flag 是一個記認(rèn), 一般來說, 這可以是 0 或是 1 (也可用 on 或 off, 或任何兩個自選的名稱或數(shù)字), 但也可以是 2、3、4 或更大的數(shù)字, 在這例子有以下設(shè)定:

          1. 程式開啟時 flag=0。

          2. 當(dāng) counter( ) 執(zhí)行時會順便將 flag 變?yōu)?1。

          3. 在 [繼續(xù)計時] 這按鈕的反應(yīng)中, 會先檢查 flag 是 0 或是 1, 若是 0 就會產(chǎn)生作用, 若是 1 就沒有反應(yīng)。

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

           

            這處的 flag 是一個變數(shù), 可任意取名, 我們用 flag來稱呼這變數(shù)的原因, 是因?yàn)檫@變數(shù)好處一支旗, 將旗豎起 (flag is on), 就會產(chǎn)生一個作用, 將旗放下 (flag is off), 就產(chǎn)生另一個作用。

           

          練習(xí)-75 只可開啟一次的 function

            這練習(xí)是將上個練習(xí)加多一個 flag, 使到每次只能有一個 count( ) 這 function 在進(jìn)行。

          1. 請用瀏覽器開啟示範(fàn)磁碟中的 flag2.htm, 這檔案有以下內(nèi)容:

          <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="
          繼續(xù)計時" 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. 在網(wǎng)頁中, 你應(yīng)見到三個按鈕及文字框中的數(shù)字跳動。

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

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

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

           

          1. 這網(wǎng)頁第 4 行有這一句: flag=0 , 這是設(shè)定 flag 這變數(shù)及將初始值定為 0, 你也可將初始值定為 1, 隨後有關(guān)的 0 和 1 對調(diào)。

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

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

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

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

            這處的 flag=1 設(shè)定, 實(shí)際設(shè)為 1 或 2 或 3 等數(shù)值都是一樣的, 只要不是 0 就可以了, 所以這兩個相對的旗標(biāo), 看似是 "0" 和 "1", 實(shí)際是 "0" 和 "non-zero" (非-0)。

          4. [停止計時] 的按鈕有以下設(shè)定:

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

            這是停止 setTimeout( ) 的操作時, 同時將 flag 轉(zhuǎn)回 0, 這使到 restart( ) 這 function 可以重新啟動 count( )

           



          posted on 2011-10-07 17:20 Steven_bot 閱讀(47467) 評論(2)  編輯  收藏

          評論

          # re: JS中setTimeout()的用法詳解[未登錄] 2013-01-11 15:52 df

          dfgx  回復(fù)  更多評論   

          # re: JS中setTimeout()的用法詳解 2013-02-01 21:50 bickys

          非常贊!  回復(fù)  更多評論   


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 沅江市| 南靖县| 连州市| 文成县| 栾川县| 雷波县| 闸北区| 皮山县| 仙桃市| 锡林郭勒盟| 阜康市| 三门峡市| 鸡泽县| 嵊州市| 夏邑县| 襄城县| 岳池县| 五华县| 南木林县| 奉节县| 获嘉县| 建宁县| 武安市| 昭通市| 壤塘县| 无棣县| 张家港市| 连南| 勐海县| 白城市| 布拖县| 分宜县| 怀安县| 宝丰县| 西乌| 白城市| 郓城县| 夹江县| 武定县| 高陵县| 明星|