setTimeout( ) 是屬于 window 的 方法, 但我們都是略去 window 這頂層容器名稱, 這是用來設(shè)定一個時間, 時間到了, 就會執(zhí)行一個指定的 method 請先看以下一個簡單, 這是沒有實際用途的例子, 只是用來示范 setTimeout( ) 的語法。 1、setTimeout( ) 語法例子 <html><body text=red><h1> <font color=blue> 示范網(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, 有以下語法: setTimeout(code, milliseconds, param1, param2, ...)setTimeout(function, milliseconds, param1, param2, ...) code/function:必需。要調(diào)用一個代碼串,也可以是一個函數(shù)。 milliseconds:可選。執(zhí)行或調(diào)用 code/function 需要等待的時間,以毫秒計。默認(rèn)為 0。 param1, param2, ... : 可選。 傳給執(zhí)行函數(shù)的其他參數(shù)(IE9 及其更早版本不支持該參數(shù))。 這次例子是設(shè)定等待 3 秒 (3000 milliseconds), 瀏覽器就會執(zhí)行 alert( ) 這一個method,注意這個函數(shù)可以由我們自己重新書寫。下面就來看一看調(diào)用function的方式 <html><head></head><body text="red"><h1><font color="blue"> 示范網(wǎng)頁 </font></h1><script>// setTimeout("alert('出窗')",3000 );setTimeout("changeState()",3000 );function changeState(){// alert("彈出");let content=document.getElementById('content');content.innerHTML="<div>這是三秒鐘之后</div>";}</script><p id="content"> 請等三秒鐘!</p></body></html> 以上這段代碼是實現(xiàn)一個在3秒鐘之后進(jìn)行更換文本的內(nèi)容,在更換內(nèi)容的時候調(diào)用了方法changeState()方法 3、有了以上基礎(chǔ),我們可以實現(xiàn)一個自動運行的按照時間遞加的計數(shù)器,如下面所示代碼: <html><body text=red><h1><font color=blue> 示范網(wǎng)頁 </font></h1><script>var x=0;function changeState(){x=x+1;//注意這里的調(diào)用方式,使用引號包圍setTimeout("changeState()",1000 );let content=document.getElementById('content');content.innerHTML=x;console.log(x);}</script><button onclick="changeState()">開始計時</button><p>已運行時間</p><p id="content"></p></body></html>
雖然實現(xiàn)了數(shù)值的遞增,但是當(dāng)我們連續(xù)點擊按鈕時,你會發(fā)現(xiàn),數(shù)值的增加不是按照1秒增加的(小于1秒),下面,我們進(jìn)行一些限制條件,比如限制x<60,然后重新開始,在其他位進(jìn)1,也就是實現(xiàn)鐘表計時功能,如下面代碼: <html><body text=red><h1><font color=blue> 示范網(wǎng)頁 </font></h1><script>var x=00;var y=00;var z=00;function changeState(){if(x<=59&&x>=0 && y<=59 && y>=0 && z<=59 && z>=0){//注意這里的調(diào)用方式,使用引號包圍let content=document.getElementById('content');content.innerHTML=z+":"+y+":"+x;console.log(x);x=x+1;}else if(y<=59 && y>=0 && z<=59 && z>=0){y=y+1;x=0;}else if (z<=59 && z>=0) {z=z+1;y=0;x=0;}setTimeout("changeState()",1000 );}</script><button onclick="changeState()">開始計時</button><p>已運行時間</p><p id="content"></p></body></html>
3、既然有開始計時,那么想當(dāng)然就要有停止計時,那么就需要知道這個函數(shù)------clearTimeout( ) setTimeout( ) 來使到瀏覽器不斷執(zhí)行一個 function, 當(dāng)一個 setTimeout( ) 開始了循環(huán)的工作, 我們要使它停下來, 可使用 clearTimeout( ) 這 method。 如下所示,停止的語句(注意:count1(),count2()分別是計時開始的方法,而meter1,meter2分別是setTimeout的定義) <html><head><script>x = 0y = 0function 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="lightcyantext=red"><p> <br /> </p><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> </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> 4、設(shè)置點擊一次標(biāo)志--- Set flag <html><head><script>x = 0flag = 0function 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="lightcyantext=red"><p> <br /> </p><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> </p><form><input type="button" value="Show flag" onclick="alert('The flag now is '+ flag)" /></form></body></html> 效果說明: 1. 在網(wǎng)頁中, 你應(yīng)該能看到三個按鈕及文字框中的數(shù)字跳動。 代碼解析: 1. 這網(wǎng)頁第 5行有這一句: flag=0 , 這是設(shè)定 flag 這變量及將初始值定為 0, 你也可將初始值定為 1, 隨后有關(guān)的 0 和 1 對調(diào)。 function restart( ){ if (flag==0) { count( ) }} 這里的 if statement 檢查 flag是否等于 0, 若是 0 就啟動 count(), 若是 1 (即不是 0) 就沒有反應(yīng),使用這方法, 若 count( )已在執(zhí)行中, [繼續(xù)計時] 這按鈕不會有作用。 onClick="clearTimeout(timeoutID);flag=0" 上面代碼是停止 setTimeout( ) 的操作時,同時將 flag 傳回 0, 這使到restart( ) 這function 可以重新啟動 count()。 注意:下面方法是定時作用,能夠按照一定的時間執(zhí)行相同的操作setInterval let i =0; setInterval(() => { console.log(i++); },1500);//1000為1秒鐘 在上面代碼中,每隔1.5秒就會有一次打印,對于這個方法,同樣能夠?qū)崿F(xiàn)上面操作中的始終功能,并且代碼更加簡單. 應(yīng)該值得注意的是: setTimeout 也有個小細(xì)節(jié),第二個參數(shù)設(shè)置為 0 也許會有人認(rèn)為這樣就不是異步了,其實還是異步。這是因為 HTML5 標(biāo)準(zhǔn)規(guī)定這個函數(shù)第二個參數(shù)不得小于 4 毫秒,不足會自動增加。 |
|