溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

javascript如何清除所有定時(shí)器

發(fā)布時(shí)間:2021-09-11 08:16:49 來源:億速云 閱讀:2515 作者:小新 欄目:web開發(fā)

小編給大家分享一下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來保存,所以可以直接把timerclearInterval傳進(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é)果:

javascript如何清除所有定時(shí)器

顯然易得:
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í)器的需求

那么我們來試一下效果,拿騰訊視頻為例:

javascript如何清除所有定時(shí)器

騰訊視頻的首頁一上來有一個(gè)輪播圖,輪播圖這種東西一般多是用setInterval定時(shí)器實(shí)現(xiàn)的,但是我們并不知道儲(chǔ)存這個(gè)輪播圖的定時(shí)器的變量是什么,我們要停掉這個(gè)輪播圖,就可以用剛剛的代碼直接停掉所有的定時(shí)器。

javascript如何清除所有定時(shí)器

在控制臺(tái)中執(zhí)行完剛剛的代碼后,發(fā)現(xiàn)輪播圖確實(shí)停了。

以上是“javascript如何清除所有定時(shí)器”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(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)容。

AI