您好,登錄后才能下訂單哦!
小編給大家分享一下javascript如何清除所有定時(shí)器,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
在JS中,可利用for循環(huán)和clearInterval()函數(shù)來清除所有定時(shí)器,語法“end=setInterval(function(){},10000);for(i=1;i<=end;i++){clearInterval(i);}”。
本教程操作環(huán)境:windows7系統(tǒng)、javascript1.8.5版、Dell G3電腦。
我們有時(shí)會(huì)有清除頁面中所有定時(shí)器的需求
如果我們?cè)趧?chuàng)建定時(shí)器(setInterval
)的時(shí)候用一個(gè)變量保存了它,那么清除這個(gè)定時(shí)器很簡單,直接清除(clearInterval
)就好了
例如:
let timer = setInterval(function () { console.log('timer'); }, 1000); clearInterval(timer);
但有時(shí)創(chuàng)建的定時(shí)器并沒有用變量保存,這是我們就無法直接清除它了
例如:
let timer = setInterval(function () { console.log('timer'); }, 1000); setInterval(function () { console.log('timer'); }, 1000); clearInterval(timer); clearInterval(/* ??? */); // 操蛋
第一個(gè)定時(shí)器我們有用一個(gè)變量timer
來保存,所以可以直接把timer
給clearInterval
傳進(jìn)去就清除掉了
但是第二個(gè)定時(shí)器我們沒有保存它,clearInterval
的時(shí)候不知道要傳什么,這就很操蛋了
那么怎么解決這個(gè)問題呢?
我們首先來找一下規(guī)律:
for (let i = 0; i < 10000; i++) { let t = setInterval(function () { }, 1000); console.log(t); }
運(yùn)行結(jié)果:
顯然易得:setInterval
的返回值是一個(gè)代表定時(shí)器的數(shù)值型,而且這個(gè)數(shù)值還是按照定時(shí)器創(chuàng)建的先后順序從1開始遞增的
那么我們清除頁面中所有定時(shí)器的需求就不難實(shí)現(xiàn)了
那么比如現(xiàn)在有這么多個(gè)定時(shí)器:
let t = setInterval(function () { }, 1000); let r = Math.random() * 100; for (let i = 0; i < r; i++) { setInterval(function () { }, 1000); }
要全部清除的話就要用一個(gè)循環(huán)把1到最后一個(gè)創(chuàng)建的定時(shí)器所對(duì)應(yīng)的數(shù)依次的用clearInterval
給清除掉。但是現(xiàn)在有一堆的定時(shí)器,我們并不知道現(xiàn)在具體有多少定時(shí)器,所以也不知到最后一個(gè)創(chuàng)建的定時(shí)器所對(duì)應(yīng)的數(shù)是多少。那么首先我們可以暴力一點(diǎn)
for (let i = 1; i < 100000; i++) { clearInterval(i); }
我直接找一個(gè)很大的數(shù)比如100000,一般一個(gè)頁面里應(yīng)該不會(huì)有100000多個(gè)定時(shí)器,一般定時(shí)器都在1,100000這個(gè)范圍里,所以這個(gè)方法肯定是能實(shí)現(xiàn)我們的需求的。
不過還是不太好,畢竟有點(diǎn)太暴力了。那么我們就需要求出當(dāng)前最后一個(gè)創(chuàng)建的定時(shí)器所對(duì)應(yīng)的數(shù)n是多少,我們知道定時(shí)器對(duì)應(yīng)的數(shù)是從1開始依次遞增的,那么我們只要再創(chuàng)建一個(gè)定時(shí)器并且用一個(gè)變量end儲(chǔ)存起來,這個(gè)數(shù)end就是n+1,這樣我們就求出n了,然后就可以從1循環(huán)到n了,哦,記得還有把剛剛創(chuàng)建的第n+1個(gè)定時(shí)器給清除掉,所以循環(huán)是從1到end。
那么代碼如下:
let end = setInterval(function () { }, 10000); for (let i = 1; i <= end; i++) { clearInterval(i); }
這樣我們就完美的實(shí)現(xiàn)了清除頁面中所有定時(shí)器的需求
那么我們來試一下效果,拿騰訊視頻為例:
騰訊視頻的首頁一上來有一個(gè)輪播圖,輪播圖這種東西一般多是用setInterval
定時(shí)器實(shí)現(xiàn)的,但是我們并不知道儲(chǔ)存這個(gè)輪播圖的定時(shí)器的變量是什么,我們要停掉這個(gè)輪播圖,就可以用剛剛的代碼直接停掉所有的定時(shí)器。
在控制臺(tái)中執(zhí)行完剛剛的代碼后,發(fā)現(xiàn)輪播圖確實(shí)停了。
以上是“javascript如何清除所有定時(shí)器”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。