最近再改一個舊項目的bug,需要用到setInterval定時器的功能來每隔幾秒調用一次接口。不過為了不影響性能,在跳轉到其他頁面時需要清除定時器。這個項目是用的jquery寫了,所以不能用react框架那樣有提供生命周期函數來清除定時器。
一開始想在起始index.js定義一個全局變量如:window.intervalId, 在需要定時器頁面:
window.clearInterval(window.intervalId); window.intervalId = window.setInterVal(function() {}, 5000);
然后在其他頁面上清除定時器,加上代碼
window.clearInterval(window.intervalId);
不過貌似沒啥效果。
后面換了一種思路,就跟react組件卸載時觸發生命周期函數類似,我在定時器里面去判斷該頁面的dom元素是否存在來確定是清除定時器還是繼續跑定時器
var intervalId; window.clearInterval(intervalId); intervalId = window.setInterval(func, 5000); func() { if(document.getElementById('pageId') === null){ window.clearInterval(intervalId); return; } yourFunc(); } yourFunc() { console.log('yourFunc'); }