概述
在js動畫中我們經(jīng)常用到定時器這種工具麻汰,它也確實很好用。
其中js內(nèi)置的setInterval()與setTimeout()函數(shù)提供了定時的功能真仲,前者是每隔幾秒執(zhí)行一次阱缓,后者是延遲一段時間執(zhí)行一次戳护。此外金抡,javascript內(nèi)置的clearInterval()函數(shù)用于取消定時器功能。
setInterval()函數(shù)
setInterval()函數(shù)可按照指定的周期(以毫秒計)來調(diào)用函數(shù)或計算表達式腌且。它可以無限執(zhí)行下去梗肝,也可以通過clearInterval()函數(shù)清除掉 。
//它的基本語法如下:
var timer= setInterval(code, delay);
//其中code是執(zhí)行的代碼铺董,它可以是一個function執(zhí)行函數(shù)巫击,delay是指定的周期禀晓,以毫秒計,每過多少毫秒執(zhí)行一次前面的代碼坝锰。
舉個例子
var fn=function(){
console.log("fn()函數(shù)被執(zhí)行了");
}
setInterval(fn,1000);//每隔1min控制臺輸出一次
setTimeout()函數(shù)
setTimeout()在指定的延遲時間之后調(diào)用一個函數(shù)或者執(zhí)行一個代碼片段粹懒,使用clearTimeout()函數(shù)可取消由 setTimeout() 方法設(shè)置的延遲調(diào)用。
//它的基本語法跟setInterval()差不多:
var timer= setTimeout()(code, delay);
//其中code是執(zhí)行的代碼顷级,它可以是一個function執(zhí)行函數(shù)凫乖,delay是代碼執(zhí)行延遲的時間,也是以毫秒計弓颈。
舉個例子
setTimeout(function() {
console.log(1);
}, 1000); //延遲1min后在控制臺輸出1帽芽;
再比如:
setTimeout(function() {
console.log(1);
}, 0);
console.log(2);
//執(zhí)行結(jié)果是:先輸出2,再輸出1翔冀。
使用setTimeout()函數(shù)優(yōu)化setInterval()函數(shù)的方案
一般不用setInterval()函數(shù)导街,而用setTimeout()函數(shù)的延時遞歸來代替setInterval()函數(shù)。setInterval()函數(shù)會產(chǎn)生回調(diào)堆積纤子,特別是時間很短的時候搬瑰。
方案一:
var timeout = false; //啟動及關(guān)閉按鈕
function time() {
if(timeout) return;
console.log(1);
setTimeout(time,1000);
}
time();
方案二:
var fn=function(){
console.log(1);
setTimeout(fn, 1000)
}
fn();
最后說一下clearInterval()函數(shù)和 clearTimeout()函數(shù)的語法。這個很簡單计福,只要將前面的定時器賦予一個變量跌捆,然后在clearInterval()函數(shù)或 clearTimeout()函數(shù)小括號中寫上這個變量名就可以清除定時器了。
以上就是我對定時器的一些簡單想法象颖,希望大家能夠喜歡佩厚。