概述
在js動畫中我們經常用到定時器這種工具,它也確實很好用。
其中js內置的setInterval()與setTimeout()函數提供了定時的功能,前者是每隔幾秒執(zhí)行一次,后者是延遲一段時間執(zhí)行一次。此外,javascript內置的clearInterval()函數用于取消定時器功能。
setInterval()函數
setInterval()函數可按照指定的周期(以毫秒計)來調用函數或計算表達式。它可以無限執(zhí)行下去,也可以通過clearInterval()函數清除掉 。
//它的基本語法如下:
var timer= setInterval(code, delay);
//其中code是執(zhí)行的代碼,它可以是一個function執(zhí)行函數,delay是指定的周期,以毫秒計,每過多少毫秒執(zhí)行一次前面的代碼。
舉個例子
var fn=function(){
console.log("fn()函數被執(zhí)行了");
}
setInterval(fn,1000);//每隔1min控制臺輸出一次
setTimeout()函數
setTimeout()在指定的延遲時間之后調用一個函數或者執(zhí)行一個代碼片段,使用clearTimeout()函數可取消由 setTimeout() 方法設置的延遲調用。
//它的基本語法跟setInterval()差不多:
var timer= setTimeout()(code, delay);
//其中code是執(zhí)行的代碼,它可以是一個function執(zhí)行函數,delay是代碼執(zhí)行延遲的時間,也是以毫秒計。
舉個例子
setTimeout(function() {
console.log(1);
}, 1000); //延遲1min后在控制臺輸出1;
再比如:
setTimeout(function() {
console.log(1);
}, 0);
console.log(2);
//執(zhí)行結果是:先輸出2,再輸出1。
使用setTimeout()函數優(yōu)化setInterval()函數的方案
一般不用setInterval()函數,而用setTimeout()函數的延時遞歸來代替setInterval()函數。setInterval()函數會產生回調堆積,特別是時間很短的時候。
方案一:
var timeout = false; //啟動及關閉按鈕
function time() {
if(timeout) return;
console.log(1);
setTimeout(time,1000);
}
time();
方案二:
var fn=function(){
console.log(1);
setTimeout(fn, 1000)
}
fn();
最后說一下clearInterval()函數和 clearTimeout()函數的語法。這個很簡單,只要將前面的定時器賦予一個變量,然后在clearInterval()函數或 clearTimeout()函數小括號中寫上這個變量名就可以清除定時器了。
以上就是我對定時器的一些簡單想法,希望大家能夠喜歡。