我正在我的应用程序中运行一个计时器,它将分钟和秒的值存储在 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
没有得到更新,它正在继续使用旧值。
请帮助我重置并从给定值开始。
最佳答案
要重置计时器,您需要停止旧计时器。为此,您需要检索 setInterval
函数返回的 id 并将其分配给代码中的全局变量。
intervalId = setInterval(function() { ... ]);
然后在 startTimer 函数的开头添加
if(typeof intervalId != 'undefined'){
clearInterval(intervalId);
}
或者只是创建附加功能
function resetOrStartTimer(duration){
if(typeof intervalId != 'undefined'){
clearInterval(intervalId);
}
startTimer(duration);
}
关于javascript - 如何在单击按钮时更新 setinterval 函数中的变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49528111/