定時器分兩種分別是setTimeout和setInterval。
兩者的用法分別是setTimeout(funhander,time);setInterval(fnhander,time);設置的相應計時器需要用clearTimeout(對象)和clearInterval(對象)清掉。有以下幾點需要注意:
第一:setTimeout(funhander,time)的作用是在過time毫秒后,執行一次句柄funhander指向的方法。而setInterval(funhander,time)的作用是,每隔time毫秒后,就執行一次句柄funhander指向的方法。一直到我清掉計時器停止。
第二:巨大多數的計時器使用都是為了執行漸變、漸隱漸現、位置漸變等效果,所以funhander指向的方法會被多次執行。因此如果我們使用setTimeout做定時器,一般要把計時器的設置寫在funhander指向的方法里,這樣就可以循環調用,多次執行funhander,一直到我清掉這個定時器。而在使用setInterval設置定時器的時候,一般要放在funhander指向行數的外面。
第三:funhander指向的方法里處理了漸變中的一步,又會被重復執行,所以在此方法中大多包含有判斷語句IF。用來控制漸變到一定程度的時候進行相應處理。比如清掉定時器或者進行循環操作。
第四:funhander為句柄,此處還可以為代碼段,假設重復調用的函數為function test() {alert("1");}則,我們可以寫為 var timer = setTimeout(test,1000)或者 var timer = setTimeout("test()",1000)或者 var timer = setTimeout("alert("1")",1000)。但是下面的寫法是錯誤的。var timer = setTimeout(test(),1000)。
第五:因為funhander部分是句柄,所以不能傳遞參數,但是有些函數是必須要傳遞參數的,這時候我們一般用代碼段。如果碰到又需要用句柄,又不能用代碼段的特殊情況,我們一般用比較特殊的方法處理。如 var timer =setTimeout(test(name),1000)。這時候這個test(name)看起來是不對的,實際上如果他的返回值是一個沒有傳參的方法,利用子函數可以調用父函數變量的特點,把參數傳遞到返回函數(子函數)內部。那上面的寫法一樣是可以的。
第六:在設定時器的時候一定要有返回值timer(當然你可以起自己想要的名字)。清掉定時器的時候需要使用,也是一個好的習慣。