js中setInterval與setTimeout用法

js中setInterval與setTimeout用法

JS里設(shè)定延時(shí):

使用SetInterval和設(shè)定延時(shí)函數(shù)setTimeout 很類似予借。setTimeout 運(yùn)用在延遲一段時(shí)間寸宏,再進(jìn)行某項(xiàng)操作掀虎。
setTimeout("function",time) 設(shè)置一個(gè)超時(shí)對(duì)象
setInterval("function",time)設(shè)置一個(gè)超時(shí)對(duì)象
setInterval為自動(dòng)重復(fù)冀宴,setTimeout不會(huì)重復(fù)政冻。
clearTimeout(對(duì)象) 清除已設(shè)置的setTimeout對(duì)象 clearInterval(對(duì)象) 清除已設(shè)置的setInterval對(duì)象
使用定時(shí)器實(shí)現(xiàn)JavaScript的延期執(zhí)行或重復(fù)執(zhí)行 window對(duì)象提供了兩個(gè)方法來(lái)實(shí)現(xiàn)定時(shí)器的效果牢硅,分別是window.setTimeout()window.setInterval蒙谓。其中前者可以使一段代碼在指定時(shí)間后運(yùn)行;而后者則可以使一段代碼每過(guò)指定時(shí)間就運(yùn)行一次欺嗤。它們的原型如下:

window.setTimeout(expression,milliseconds);
window.setInterval(expression,milliseconds); 

其中参萄,expression可以是用引號(hào)括起來(lái)的一段代碼,也可以是一個(gè)函數(shù)名煎饼,到了指定的時(shí)間讹挎,系統(tǒng)便會(huì)自動(dòng)調(diào)用該函數(shù),當(dāng)使用函數(shù)名作為調(diào)用句柄時(shí)吆玖,不能帶有任何參數(shù)筒溃;而使用字符串時(shí),則可以在其中寫入要傳遞的參數(shù)沾乘。兩個(gè)方法的第二個(gè)參數(shù)是milliseconds怜奖,表示延時(shí)或者重復(fù)執(zhí)行的毫秒數(shù)。
下面分別介紹兩種方法意鲸。
1.window.setTimeout方法 該方法可以延時(shí)執(zhí)行一個(gè)函數(shù)烦周,例如:

<script language="JavaScript" type="text/javascript">
<!--
function hello(){ 
  alert("hello");
} 
window.setTimeout(hello,5000);
//-->
</script>

這段代碼將使得頁(yè)面打開(kāi)5秒鐘后顯示對(duì)話框“hello”尽爆。其中最后一句也可以寫為:window.setTimeout("hello()",5000); 讀者可以體會(huì)它們的差別怎顾,在window.setInterval方法中也有這樣的性質(zhì)。 如果在延時(shí)期限到達(dá)之前取消延執(zhí)行漱贱,可以使用window.clearTimeout(timeoutId)方法槐雾,該方法接收一個(gè)id,表示一個(gè)定時(shí)器幅狮。這個(gè)id是由setTimeout方法返回的募强,例如:

<script language="JavaScript" type="text/javascript">
    <!--
    function hello() {
        alert("hello");
    }
    var id=window.setTimeout(hello,5000);
    document.onclick=function(){
        window.clearTimeout(id);
    }
    //-->
</script>

這樣株灸,如果要取消顯示,只需單擊頁(yè)面任何一部分擎值,就執(zhí)行了window.clearTimeout方法慌烧,使得超時(shí)操作被取消。

2.window.setInterval方法 該方法使得一個(gè)函數(shù)每隔固定時(shí)間被調(diào)用一次鸠儿,是一個(gè)很常用的方法屹蚊。如果想要取消定時(shí)執(zhí)行,和clearTimeout方法類似进每,可以調(diào)用window.clearInterval方法汹粤。clearInterval方法同樣接收一個(gè)setInterval方法返回的值作為參數(shù)。例如:

//定義一個(gè)反復(fù)執(zhí)行的調(diào)用 
var id=window.setInterval("somefunction",10000); 
//取消定時(shí)執(zhí)行 
window.clearInterval(id);

上面的代碼僅用于說(shuō)明怎樣取消一個(gè)定時(shí)執(zhí)行田晚。實(shí)際上在很多場(chǎng)合都需要用到setInterval方法嘱兼,下面將設(shè)計(jì)一個(gè)秒表,來(lái)介紹setInterval函數(shù)的用途:該秒表將包括兩個(gè)按鈕和一個(gè)用于顯示時(shí)間的文本框贤徒。當(dāng)單擊開(kāi)始按鈕時(shí)開(kāi)始計(jì)時(shí)芹壕,最小單位為0.01秒,此時(shí)再次單擊按鈕則停止計(jì)時(shí)接奈,文本框顯示經(jīng)過(guò)的時(shí)間哪雕。另外一個(gè)按鈕用于將當(dāng)前時(shí)間清零。其實(shí)現(xiàn)代碼如下:

<!DOCTYPE html> 
<html
    <head>
        <title> New Document </title>
    </head>
    <body>
        <form action="somepage.asp"> 
            <input type="text" value="0" name="txt1"/> 
            <input type="button" value="開(kāi)始" name="btnStart"/> 
            <input type="button" value="重置" name="btnReset"/> 
        </form>
    </body> 
</html>
<script type="text/javascript">
    <!--
    //獲取表單中的表單域
    var txt=document.forms[0].elements["txt1"];
    var btnStart=document.forms[0].elements["btnStart"];
    var btnReset=document.forms[0].elements["btnReset"]
    //定義定時(shí)器的id
    var id;
    //每10毫秒該值增加1
    var seed=0;
    btnStart.onclick=function(){
        //根據(jù)按鈕文本來(lái)判斷當(dāng)前操作
        if(this.value=="開(kāi)始"){
            //使按鈕文本變?yōu)橥V?            this.value="停止";
            //使重置按鈕不可用
            btnReset.disabled=true;
            //設(shè)置定時(shí)器鲫趁,每0.01s跳一次
            id=window.setInterval(tip,10);
        }
        else{
            //使按鈕文本變?yōu)殚_(kāi)始
            this.value="開(kāi)始";
            //使重置按鈕可用
            btnReset.disabled=false;
            //取消定時(shí)
            window.clearInterval(id);
        }
    }
    //重置按鈕
    btnReset.onclick=function(){
        seed=0;
    }
    //讓秒表跳一格
    function tip(){
        seed++;
        txt.value=seed/100;
    }
    //-->
</script>

給定時(shí)器調(diào)用傳遞參數(shù) 無(wú)論是window.setTimeout還是window.setInterval斯嚎,在使用函數(shù)名作為調(diào)用句柄時(shí)都不能帶參數(shù),而在許多場(chǎng)合必須要帶參數(shù)挨厚,這就需要想方法解決堡僻。例如對(duì)于函數(shù)hello(_name),它用于針對(duì)用戶名顯示歡迎信息:

var userName="jack";
//根據(jù)用戶名顯示歡迎信息
function hello(_name){
    alert("hello,"+_name);
}

這時(shí)疫剃,如果企圖使用以下語(yǔ)句來(lái)使hello函數(shù)延遲3秒執(zhí)行是不可行的:
window.setTimeout(hello(userName),3000);
這將使hello函數(shù)立即執(zhí)行钉疫,并將返回值作為調(diào)用句柄傳遞給setTimeout函數(shù),其結(jié)果并不是程序需要的巢价。而使用字符串形式可以達(dá)到想要的結(jié)果:
window.setTimeout("hello(userName)",3000);
這里的字符串是一段JavaScript代碼牲阁,其中的userName表示的是變量。但這種寫法不夠直觀壤躲,而且有些場(chǎng)合必須使用函數(shù)名城菊,下面用一個(gè)小技巧來(lái)實(shí)現(xiàn)帶參數(shù)函數(shù)的調(diào)用:

<script language="JavaScript" type="text/javascript">
    <!--
    var userName="jack";
    //根據(jù)用戶名顯示歡迎信息
    function hello(_name){
        alert("hello,"+_name);
    }
    //創(chuàng)建一個(gè)函數(shù),用于返回一個(gè)無(wú)參數(shù)函數(shù)
    function _hello(_name){
        return function(){
            hello(_name);
        }
    }
    window.setTimeout(_hello(userName),3000);
    //-->
</script>

這里定義了一個(gè)函數(shù)_hello碉克,用于接收一個(gè)參數(shù)凌唬,并返回一個(gè)不帶參數(shù)的函數(shù),在這個(gè)函數(shù)內(nèi)部使用了外部函數(shù)的參數(shù)漏麦,從而對(duì)其調(diào)用客税,不需要使用參數(shù)况褪。在window.setTimeout函數(shù)中,使用_hello(userName)來(lái)返回一個(gè)不帶參數(shù)的函數(shù)句柄更耻,從而實(shí)現(xiàn)了參數(shù)傳遞的功能测垛。
window對(duì)象有兩個(gè)主要的定時(shí)方法,分別是setTimeoutsetInteval 他們的語(yǔ)法基本上相同秧均,但是完成的功能取有區(qū)別赐纱。
setTimeout方法是定時(shí)程序,也就是在什么時(shí)間以后干什么熬北。干完了就拉倒疙描。
setInterval方法則是表示間隔一定時(shí)間反復(fù)執(zhí)行某操作。
JS里設(shè)定延時(shí):
使用setInterval和設(shè)定延時(shí)函數(shù)setTimeout 很類似讶隐。setTimeout 運(yùn)用在延遲一段時(shí)間起胰,再進(jìn)行某項(xiàng)操作。
setTimeout("function",time) 設(shè)置一個(gè)超時(shí)對(duì)象
setInterval("function",time) 設(shè)置一個(gè)超時(shí)對(duì)象
SetInterval為自動(dòng)重復(fù)巫延,setTimeout不會(huì)重復(fù)效五。
clearTimeout(對(duì)象) 清除已設(shè)置的setTimeout對(duì)象
clearInterval(對(duì)象) 清除已設(shè)置的setInterval對(duì)象
如果用setTimeout實(shí)現(xiàn)setInerval的功能,就需要在執(zhí)行的程序中再定時(shí)調(diào)用自己才行炉峰。如果要清除計(jì)數(shù)器需要根據(jù)使用的方法不同畏妖,調(diào)用不同的清除方法:
例如:

var tttt=setTimeout('northsnow()',1000);
clearTimeout(tttt);

或者:

tttt=setInterval('northsnow()',1000);
clearInteval(tttt);

舉一個(gè)例子:

<div id="liujincai">
</div>
<input type="button" name="start" value="start" onclick='startShow();'>
<input type="button" name="stop" value="stop" onclick="stop();">
<script language="javascript">
    var intvalue=1;
    var timer2=null; 
    function startShow() {
        liujincai.innerHTML=liujincai.innerHTML + " " + (intvalue ++).toString();
        timer2=window.setTimeout("startShow()",2000);
    }
    function stop() {
        window.clearTimeout(timer2);
    }
</script>

或者:

<div id="liujincai">
</div>
<input type="button" name="start" value="start" onclick='timer2=window.setInterval("startShow()",2000);//startShow();'>
<input type="button" name="stop" value="stop" onclick="stop();">
<script language="javascript">
    var intvalue=1;
    var timer2=null;
    function startShow() {
        liujincai.innerHTML=liujincai.innerHTML + " " + (intvalue ++).toString();
    }
    function stop() {
        window.clearInterval(timer2);
    }
</script>

轉(zhuǎn)自:http://www.cnblogs.com/mercy/articles/2424882.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市疼阔,隨后出現(xiàn)的幾起案子戒劫,更是在濱河造成了極大的恐慌,老刑警劉巖婆廊,帶你破解...
    沈念sama閱讀 212,542評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件迅细,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡淘邻,警方通過(guò)查閱死者的電腦和手機(jī)茵典,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)宾舅,“玉大人统阿,你說(shuō)我怎么就攤上這事〕镂遥” “怎么了扶平?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,021評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)崎溃。 經(jīng)常有香客問(wèn)我蜻直,道長(zhǎng)盯质,這世上最難降的妖魔是什么袁串? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,682評(píng)論 1 284
  • 正文 為了忘掉前任概而,我火速辦了婚禮,結(jié)果婚禮上囱修,老公的妹妹穿的比我還像新娘赎瑰。我一直安慰自己,他們只是感情好破镰,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布餐曼。 她就那樣靜靜地躺著,像睡著了一般鲜漩。 火紅的嫁衣襯著肌膚如雪源譬。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,985評(píng)論 1 291
  • 那天孕似,我揣著相機(jī)與錄音踩娘,去河邊找鬼。 笑死喉祭,一個(gè)胖子當(dāng)著我的面吹牛养渴,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播泛烙,決...
    沈念sama閱讀 39,107評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼理卑,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了蔽氨?” 一聲冷哼從身側(cè)響起藐唠,我...
    開(kāi)封第一講書(shū)人閱讀 37,845評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鹉究,沒(méi)想到半個(gè)月后中捆,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,299評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡坊饶,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評(píng)論 2 327
  • 正文 我和宋清朗相戀三年泄伪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片匿级。...
    茶點(diǎn)故事閱讀 38,747評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蟋滴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出痘绎,到底是詐尸還是另有隱情津函,我是刑警寧澤,帶...
    沈念sama閱讀 34,441評(píng)論 4 333
  • 正文 年R本政府宣布孤页,位于F島的核電站尔苦,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜允坚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評(píng)論 3 317
  • 文/蒙蒙 一魂那、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧稠项,春花似錦涯雅、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,828評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至拗胜,卻和暖如春蔗候,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背埂软。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,069評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工琴庵, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人仰美。 一個(gè)月前我還...
    沈念sama閱讀 46,545評(píng)論 2 362
  • 正文 我出身青樓迷殿,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親咖杂。 傳聞我的和親對(duì)象是個(gè)殘疾皇子庆寺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容