狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

setTimeout,setInterval的使用和區別,倒記時

admin
2011年1月22日 21:59 本文熱度 3395

本文轉自:http://hi.baidu.com/fengchuyang/blog/item/396cfe364a53aa350b55a956.html


作者:第二十一次


這兩個方法都可以用來實現在一個固定時間段之后去執行JavaScript。不過兩者各有各的應用場景。


方 法

實際上,setTimeout和setInterval的語法相同。它們都有兩個參數,一個是將要執行的代碼字符串,還有一個是以毫秒為單位的時間間隔,當過了那個時間段之后就將執行那段代碼。


不過這兩個函數還是有區別的


setInterval在執行完一次代碼之后,經過了那個固定的時間間隔,它還會自動重復執行代碼


setTimeout只執行一次那段代碼。


雖然表面上看來setTimeout只能應用在on-off方式的動作上,不過可以通過創建一個函數循環重復調用setTimeout,以實現重復的操作:



File: settimeout_setinterval.js




Js代碼 復制代碼


  1. showTime();   

  2.   

  3. function showTime()   

  4.   

  5. {   

  6.   

  7.     var today = new Date();   

  8.   

  9.     alert("The time is: " + today.toString());   

  10.   

  11.     setTimeout("showTime()", 5000);   

  12.   

  13. }  

 


一旦調用了這個函數,那么就會每隔5秒鐘就顯示一次時間。如果使用setInterval,則相應的代碼如下所示:



File: settimeout_setinterval2.js




Js代碼 復制代碼


  1. setInterval("showTime()", 5000);   

  2.   

  3. function showTime()   

  4.   

  5. {   

  6.   

  7.     var today = new Date();   

  8.   

  9.     alert("The time is: " + today.toString());   

  10.   

  11. }  

 


這兩種方法可能看起來非常像,而且顯示的結果也會很相似,不過兩者的最大區別就是,setTimeout方法不會每隔5秒鐘就執行一次showTime函數,它是在每次調用setTimeout后過5秒鐘再去執行showTime函數這意味著如果showTime函數的主體部分需要2秒鐘執行完那么整個函數則要每7秒鐘才執行一次。而setInterval卻沒有被自己所調用的函數所束縛,它只是簡單地每隔一定時間就重復執行一次那個函數。


如果要求在每隔一個固定的時間間隔后就精確地執行某動作,那么最好使用setInterval,而如果不想由于連續調用產生互相干擾的問題,尤其是每次函數的調用需要繁重的計算以及很長的處理時間,那么最好使用setTimeout。










 


函數指針的使用

兩個計時函數中的第一個參數是一段代碼的字符串,其實該參數也可以是一個函數指針,不過Mac下的IE 5對此不支持。


如果用函數指針作為setTimeout和setInterval函數的第二個參數,那么它們就可以去執行一個在別處定義的函數了:




Js代碼 復制代碼


  1. setTimeout(showTime, 500);   

  2.   

  3. function showTime()   

  4.   

  5. {   

  6.   

  7.     var today = new Date();   

  8.   

  9.     alert("The time is: " + today.toString());   

  10.   

  11. }   

  12.   

  13. 另外,匿名函數還可以聲明為內聯函數:   

  14.   

  15. setTimeout(function(){var today = new Date();   

  16.   

  17.      alert("The time is: " + today.toString());}, 500);  

 



討 論

如果對計時函數不加以處理,那么setInterval將會持續執行相同的代碼,一直到瀏覽器窗口關閉,或者用戶轉到了另外一個頁面為止。不過還是有辦法可以終止setTimeout和setInterval函數的執行


當setInterval調用執行完畢時,它將返回一個timer ID,將來便可以利用該值對計時器進行訪問,如果將該ID傳遞給clearInterval,便可以終止那段被調用的過程代碼的執行了具體實現如下:



File: settimeout_setinterval3.js (excerpt)




Js代碼 復制代碼


  1. var intervalProcess = setInterval("alert('GOAL!')", 3000);   

  2.   

  3.   

  4.   

  5. var stopGoalLink = document.getElementById("stopGoalLink");   

  6.   

  7. attachEventListener(stopGoalLink, "click", stopGoal, false);   

  8.   

  9.   

  10.   

  11. function stopGoal()   

  12.   

  13. {   

  14.   

  15.     clearInterval(intervalProcess);   

  16.   

  17. }  

 只要點擊了stopGoalLink,不管是什么時候點擊,intervalProcess都會被取消掉,以后都不會再繼續反復執行intervalProcess。如果在超時時間段內就取消setTimeout,那么這種終止效果也可以在setTimeout身上實現,具體實現如下:



File: settimeout_setinterval4.js (excerpt)




Js代碼 復制代碼


  1. var timeoutProcess = setTimeout("alert('GOAL!')", 3000);   

  2.   

  3.   

  4.   

  5. var stopGoalLink = document.getElementById("stopGoalLink");   

  6.   

  7. attachEventListener(stopGoalLink, "click", stopGoal, false);   

  8.   

  9.   

  10.   

  11. function stopGoal()   

  12.   

  13. {   

  14.   

  15.     clearTimeout(timeoutProcess);   

  16.   

  17. }  

 


------------------------------------------------------------------------------------------------


本文轉自:http://www.newasp.net/tech/web/7595.html


作者:風未起時


setInterval全面的介紹
setInterval動作的作用是在播放動畫的時,每隔一定時間就調用函數,方法或對象。可以使用本動作更新來自數據庫的變量或更新時間顯示。setInterval動作的語法格式如下:
setInterval(function,interval[,arg1,arg2,......argn])
setInterval(object,methodName,interval[,arg1,arg2,.....argn])
第一種格式是標準動作面板中setInterval函數的默認語法,第二種格式是在專家模式動作中使用的方法。
其中的參數function是一個函數名或者一個對匿名函數的引用。object參數指定從Object對象派生的對象。methodName制定object參數中要調用的方法。interval制定對function或methodName調用兩次之間的時間,單位是毫秒。后面的arg1等是可選的參數,用于制定傳遞給function或是methodName的參數。
setInterval它設置的時間間隔小于動畫幀速(如每秒10幀,相當于100毫秒),則按照盡可能接近interval的時間間隔調用函數。而且必須使用updateAfterEvent動作來確保以足夠的頻率刷新屏幕。如果interval大于動畫幀速,則只用在每次播放頭進入某一幀是才調用,以減小每次刷新屏幕的影響。
下面的例子每隔1秒調用一次匿名函數。

setInterval(function(){trace("每隔1秒鐘我就會顯示一次")},1000);//這里的function(){}是沒有函數名
的函數。成為匿名函數,后面的1000是時間間隔,單位是毫秒。
下面的例子為我們展示如何帶參數運行。




Js代碼 復制代碼


  1. function show1(){   

  2.    trace("每隔1秒我就會顯示一次");   

  3. }   

  4. function show2(str){   

  5.    trace(str);   

  6. }   

  7. setInterval(show1,1000);   

  8. setInterval(show2,2000,"每隔2秒我就會顯示一次");  
 
上面已經將函數的setInterval方法介紹了。
下面我們將介紹對象的setInterval方法。
首先,寫一個setInterval在動作中調用對象的方法的例子,該例子不需要傳遞參數。




Js代碼 復制代碼


  1. myobj=new Object();//創建一個新的對象   

  2. myobj.interval=function){   

  3.    trace("每隔1秒我就會顯示一次");   

  4. }//創建對象的方法。   

  5. setInterval(myobj,"interval",1000);//設定時間間隔調用對象的方法。   

  6.   

  7. 接下來介紹如何傳遞參數。其實道理和函數的傳遞參數是一樣的。   

  8.   

  9. myobj=new Object();   

  10. myobj.interval-function(str){   

  11.    trace(str);   

  12. }   

  13. setInterval(myobj,"interval",2000," 每隔2秒我就會顯示一次");  
 
注意。要調用為對象定義的方法時,必須在專家模式中使用第二種語法格式。
這樣子的話呢,我們來作一個動態顯示時間的畫面。可以用下面的代碼實現。




Js代碼 復制代碼


  1. setInterval(show,1000);   

  2. function show(){   

  3.    time=new Date();   

  4.    hour=time.getHours();   

  5.       minu=time.getMinutes();   

  6.       sec=time.get.Seconds();   

  7.    datetime=hour+":"+minu+":"+sec;   

  8. }//這里的datetime是一個動態文本框的變量名字。  
 
這樣子呢,setInterval這個方法大家應該學的很好了。現在呢,我們學習clearInterval.
clearInterval動作的作用是清楚對setInterval函數的調用,它的語法格式如下clearInterval(intervalid);intervalid是調用setInterval函數后返回的對象。
下面舉一個簡單的例子。




Js代碼 復制代碼


  1. function show(){   

  2.    trace("每隔一秒我就會顯示一次");   

  3. }   

  4. var sh;   

  5. sh=setInterval(show,1000);   

  6. clearInterval(sh);  
 ------------------------------------------------------------------------------------------------


作者:holybozo

 

setInterval很不錯,可以完全代替onEnterFrame,但是使用起來卻有很多需要注意的地方

比如要用updateAfterEvent,強制刷屏
還有要記得用clearInterval(id);來停止掉setInterval,如果要在停止的地方忘記地址了,那是很恐怖的^^"

但是要當程序一大,到處都是setInterval的時候(當然這樣的程序也不好),你會為了找setInterval的id在哪里..而忙呼

注意過id的人都知道id是一個number,在你調用setInterval的時候會返回一個number,而這個number會逐加,很像addListener中的_listener數組的length

那么一個停掉所有setInterval的笨辦法




Js代碼 復制代碼


  1. MAX = 1000;    

  2. for(var i=0;i<MAX;i++){    

  3. clearInterval(i);    

  4. }  
 
定義一個足夠大的數字,然后慢慢clear,這么做就可以停止掉所有的setInterval了,當然如果你使用了超過1000個不同的setInterval(- -||)那還會出掉問題
所以最好的辦法




Js代碼 復制代碼


  1. var tmpID:Number = setInterval(function(){},10);    

  2. while(--tmpID > 0)    

  3. clearInterval(tmpID);  
 先用setInterval建立一個空函數,這樣tmpID就會得到一個目前所擁有的setInterval的個數,然后用while循環一次性搞定就可以了^^"
簡單吧,這樣,你在哪里用過setInterval都不要緊,因為我想flash內置的setInterval函數,一定有一個類似addListener中的_listener的數組,然后返回數組的長度
那么強化一下clearAll()方法




Js代碼 復制代碼


  1. function clearAll(Void):Void {    

  2. // others clear statement    

  3. var tmpId:Number = setInterval(function () {}, 10);    

  4. while (--tmpId>0) clearInterval(tmpId);    

  5. }    

  6. ////////////////////////////////////////////////    

  7. // 測試程序    

  8. function A(){trace("A");}    

  9. function B(){trace("B");}    

  10. function C(){trace("C");}    

  11. setInterval(A,50);    

  12. setInterval(B,50);    

  13. setInterval(C,50);    

  14.   

  15. setInterval(clearAll,1000);    

  16.   

  17. function clearAll(Void):Void {    

  18. var tmpId:Number = setInterval(function () {}, 10);    

  19. while (--tmpId>0) clearInterval(tmpId);    

  20. }  

該文章在 2011/1/22 21:59:17 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved