最近再改一个旧项目的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'); }