JavaScript定時(shí)器原理詳解
前言:
在很多頁(yè)面中,我們都可以看到一些倒計(jì)時(shí)或者和時(shí)間相關(guān)的效果,今天小熊將就JavaScript里面的倒計(jì)時(shí)做一概述。
首先,我們先來(lái)看看定時(shí)器,在JS中,有兩種定時(shí)器:
一、 setTimeout() 定時(shí)器
語(yǔ)法:
window.setTimeout(調(diào)用函數(shù), [延遲的毫秒數(shù)]);
setTimeout()
方法用于設(shè)置一個(gè)定時(shí)器,該定時(shí)器在定時(shí)器到期后執(zhí)行調(diào)用函數(shù)。
例如:寫一個(gè)頁(yè)面,讓其五秒鐘后彈出‘你好’。
代碼如下:
window.setTimeout(function(){ alert('你好'); },5000);
運(yùn)行結(jié)果為:
需要注意的是:
window
可以省略。- 這個(gè)調(diào)用函數(shù)可以直接寫函數(shù),或者寫函數(shù)名或者采取字符串‘函數(shù)名()'三種形式。
- 延遲的毫秒數(shù)省略默認(rèn)是 0,如果寫,必須是毫秒。
setTimeout()
這個(gè)調(diào)用函數(shù)我們也稱為回調(diào)函數(shù)callback,普通函數(shù)是按照代碼順序直接調(diào)用。而這個(gè)函數(shù),需要等待時(shí)間,時(shí)間到了才去調(diào)用這個(gè)函數(shù),因此稱為回調(diào)函數(shù)。
二、停止 setTimeout() 定時(shí)器
當(dāng)我們創(chuàng)建了一個(gè)定時(shí)器的話,如果我們想要將其取消,應(yīng)該怎樣操作呢?就用到了清除定時(shí)器的函數(shù),如下:
window.clearTimeout(timeoutID)
clearTimeout()
方法取消了先前通過(guò)調(diào)用 setTimeout()
建立的定時(shí)器。
這里面window 可以省略,并且里面的參數(shù)就是定時(shí)器的標(biāo)識(shí)符 。
舉個(gè)例子:
就上述案列,如果我們想要在指定事件前停止它,可以先添加一個(gè)點(diǎn)擊按鈕,給這個(gè)按鈕添加清除定時(shí)器的事件,操作為:
var hello = window.setTimeout(function(){ alert('你好'); },5000); var btn = document.querySelector('button'); btn.addEventListener('click',function(){ window.clearTimeout(hello); })
運(yùn)行效果為:
可以看到,當(dāng)我們沒(méi)有點(diǎn)擊停止按鈕的時(shí)候,五秒鐘后彈出‘你好’,刷新頁(yè)面后,當(dāng)我們點(diǎn)擊按鈕后,不論過(guò)多久,都不會(huì)有彈窗,清除定時(shí)器成功。
三、setInterval() 定時(shí)器
我們?cè)賮?lái)看看另一種定時(shí)器。
window.setInterval(回調(diào)函數(shù), [間隔的毫秒數(shù)]);
setInterval()
方法重復(fù)調(diào)用一個(gè)函數(shù),每隔這個(gè)時(shí)間,就去調(diào)用一次回調(diào)函數(shù)。
- window 可以省略。
- 這個(gè)調(diào)用函數(shù)可以直接寫函數(shù),或者寫函數(shù)名或者采取字符串 ‘函數(shù)名()’ 三種形式。
- 間隔的毫秒數(shù)省略默認(rèn)是 0,如果寫,必須是毫秒,表示每隔多少毫秒就自動(dòng)調(diào)用這個(gè)函數(shù)。
- 我們經(jīng)常給定時(shí)器賦值一個(gè)標(biāo)識(shí)符。
- 第一次執(zhí)行也是間隔毫秒數(shù)之后執(zhí)行,之后每隔毫秒數(shù)就執(zhí)行一次。
舉個(gè)例子:
我們來(lái)寫一個(gè)定時(shí)器,讓其每隔一秒就打印一個(gè)‘你好’,代碼為:
setInterval(function(){ console.log('你好') },1000);
運(yùn)行效果為:
四、清除setInterval() 定時(shí)器
同樣的,我們也可以清除setInterval() 定時(shí)器的效果,語(yǔ)法為:
window.clearInterval(intervalID);
clearInterval()
方法取消了先前通過(guò)調(diào)用 setInterval()
建立的定時(shí)器。
注意:
- window 可以省略。
- 里面的參數(shù)就是定時(shí)器的標(biāo)識(shí)符 。
比如我們現(xiàn)在有兩個(gè)按鈕,點(diǎn)擊一個(gè)可以開(kāi)啟定時(shí)器,點(diǎn)擊另一個(gè)可以清除該定時(shí)器,操作方法為:
<body> <button class='begin'>開(kāi)始</button> <button class='stop'>停止</button> <script> var btn = document.querySelectorAll('button'); var timer = null; btn[0].addEventListener('click',function(){ timer = setInterval(function(){ console.log('你好'); },1000) }) btn[1].addEventListener('click',function(){ clearInterval(timer) }) </script> </body>
運(yùn)行效果為:
五、電子時(shí)鐘案例
我們現(xiàn)在就可以做一個(gè)電子時(shí)鐘,顯示當(dāng)前的年月日時(shí)分秒,并讓他們自動(dòng)變化,代碼如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> div { width: 500px; margin: 100px auto; font-size: 25px; } </style> </head> <body> <div></div> <script> var div = document.querySelector('div'); function showTime(){ var date = new Date(); var y = date.getFullYear(); var m = date.getMonth()+1; m = m>=10?m:'0'+m; var d = date.getDate(); d = d>=10?d:'0'+d; var h = date.getHours(); h = h>=10?h:'0'+h; var dm = date.getMinutes(); dm = dm>=10?dm:'0'+dm; var ds = date.getSeconds(); ds = ds>=10?ds:'0'+ds; var str = y+'年'+m+'月'+d+'日 '+h+'時(shí)'+dm +'分'+ds+'秒'; div.innerHTML = str; setTimeout(showTime,1000); } window.onload = showTime(); </script> </body> </html>
運(yùn)行效果為:
到此這篇關(guān)于JavaScript定時(shí)器原理的文章就介紹到這了,更多相關(guān)JavaScript定時(shí)器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
js實(shí)時(shí)獲取窗口大小變化的實(shí)例代碼
下面小編就為大家?guī)?lái)一篇js實(shí)時(shí)獲取窗口大小變化的實(shí)例代碼。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-11-11一文了解JavaScript中call/apply/bind的使用
這篇文章主要介紹了一文了解JavaScript中call/apply/bind的使用,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下2022-07-07JavaScript累加、迭代、窮舉、遞歸等常用算法實(shí)例小結(jié)
這篇文章主要介紹了JavaScript累加、迭代、窮舉、遞歸等常用算法,結(jié)合實(shí)例形式分析了javascript累加、迭代、遞推、窮舉等算法的相關(guān)實(shí)現(xiàn)技巧與注意事項(xiàng),需要的朋友可以參考下2018-05-05通過(guò)AJAX的JS、JQuery兩種方式解析XML示例介紹
解析XML的方法有很多,在本文要為大家介紹下是使用AJAX的JS、JQuery兩種方式來(lái)進(jìn)行解析,具體實(shí)現(xiàn)如下,感興趣的朋友可以參考下2013-09-09javascript實(shí)現(xiàn)多張圖片左右無(wú)縫滾動(dòng)效果
本文主要介紹了javascript實(shí)現(xiàn)多張圖片左右無(wú)縫滾動(dòng)效果的實(shí)例。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧2017-03-03JavaScript實(shí)現(xiàn)表格點(diǎn)擊排序的方法
這篇文章主要介紹了JavaScript實(shí)現(xiàn)表格點(diǎn)擊排序的方法,可實(shí)現(xiàn)點(diǎn)擊頂部數(shù)據(jù)項(xiàng)標(biāo)題實(shí)現(xiàn)對(duì)應(yīng)數(shù)據(jù)列的排序效果,涉及javascript鼠標(biāo)事件及數(shù)據(jù)排序的技巧,需要的朋友可以參考下2015-05-05