最近做项目需要用到setInterval的倒计时功能,项目是通过类似iframe的技术打开功能页面,每次关闭调用interval的页面重新打开后会导致计时过快,最后发现每次使用interval之前将以前调用的同一个interval关闭即可解决,本文的解决方案是先通过变量记录下每次打开的interval,再打开相同interval的时候关闭已经记录的定时器即可。大家也可以使用下面的测试代码理解下
<button id="refreshBtn">刷新</button>
<button onclick='startInterval("t1")'>启动T1</button>
<button onclick='startInterval("t2")'>启动T2</button>
<button onclick='stopInterval("t1")'>停止T1</button>
<button onclick='stopInterval("t2")'>停止T2</button>
<p id="t1">倒计时:300</p>
<p id="t2">倒计时:300</p>
<script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
<script>
var SysSecond = {"init" : 300};//先给变量初始化,防止后续报错
var InterValObj = {"init" : "fun"};
function startInterval(pDom) {
SysSecond[pDom] = 300; //这里获取倒计时的起始时间 单位:秒
InterValObj[pDom] = window.setInterval(
function() {
repeatFun(pDom)
}, 1000);
}
function stopInterval(pDom) {
window.clearInterval(InterValObj[pDom]);
$("#" + pDom).html("倒计时:300");
}
$("#refreshBtn").click(function() {
location.reload();
})
function repeatFun(pDom) {
SysSecond[pDom] --;
if (SysSecond[pDom] > 0) {
$("#" + pDom).html("倒计时:" + SysSecond[pDom]);
} else {
window.clearInterval(InterValObj[pDom]);
$("#" + pDom).html("计时结束");
}
}
</script>
有更好的方法,也欢迎一起讨论沟通。^_^