我在我的应用程序中运行一个计时器,它在cookie中存储分钟和秒的值。在某段时间内,弹出窗口会提示一次如果用户在弹出窗口中单击“确定”按钮,则计时器需要重置并再次启动初始值。
function startTimer(duration) {
var timer = duration,
minutes, seconds;
var seesionIdState = 0;
setInterval(function() {
minutes = parseInt(timer / 60, 10);
seconds = parseInt(timer % 60, 10);
if (seesionIdState == 0) {
minutes = minutes < 10 ? "0" + minutes : minutes;
seconds = seconds < 10 ? "0" + seconds : seconds;
var date = new Date();
date.setTime(date.getTime() + (minutes * 60 * 1000));
cookie.set("minutes", minutes.toString(), {});
cookie.set("seconds", seconds.toString(), {});
if (--timer < 0) {
timer = 0;
}
if (minutes == 1 && seconds == 00) {
if ($window.innerWidth > 767) {
angular.element("#sessionId").modal({
backdrop: 'static'
});
setTimerforPopup();
} else {
angular.element("#sessionIdMobile").modal({
backdrop: 'static'
});
setTimerforPopup();
}
} else if (minutes == 00 && seconds == 00) {
seesionIdState++;
}
} else {
var minutes_data = getCookie("minutes");
var seconds_data = getCookie("seconds");
if (!minutes_data || !seconds_data) {
return;
}
cookie.remove('minutes');
cookie.remove('seconds');
}
}, 1000);
}
startTimer(60);
如果单击确定按钮,我将再次调用函数startTimer(60);
。但我遇到的问题是setinterval
变量timer
没有得到更新,它继续使用旧值。
请帮助我重置并从给定值开始。
答案 0 :(得分:1)
要重置计时器,您需要停止旧计时器。为此,您需要检索由setInterval
函数返回的id,并将其分配给代码中的全局变量。
intervalId = setInterval(function() { ... ]);
然后在startTimer函数的开头添加
if(typeof intervalId != 'undefined'){
clearInterval(intervalId);
}
或者只是创建附加功能
function resetOrStartTimer(duration){
if(typeof intervalId != 'undefined'){
clearInterval(intervalId);
}
startTimer(duration);
}