[英]How to set interval time?
我为计时器使用了以下功能
function startTimer(duration) {
$rootScope.timer = duration;
$rootScope.minute = 0;
$rootScope.second = 0;
$rootScope.Minutes = 0;
$rootScope.Seconds = 0;
setInterval(function () {
$rootScope.minute = parseInt($rootScope.timer / 60, 10)
$rootScope.second = parseInt($rootScope.timer % 60, 10);
$rootScope.Minutes = $rootScope.minute < 10 ? "0" +
$rootScope.minute : $rootScope.minute;
$rootScope.Seconds = $rootScope.second < 10 ? "0" +
$rootScope.second : $rootScope.second;
if (--$rootScope.timer < 0) {
$rootScope.timer = duration;
}
}, 1000);
}
startTimer(300);
我正在使用$rootScope.Minutes
和$rootScope.Seconds
来显示时间。 而且时间减少了几秒钟。 但是,如果我关闭计时器然后再次打开,它将减少2秒。 再一次我关闭并打开,它将减少3秒。 就像明智的迭代一样。 我不知道我在哪里弄错了。 请帮我。
每次调用startTimer
,它将触发另一个setInterval
,它将独立运行。 因为您使用的是相同的变量,所以每个setInterval
都将对$rootScope.timer
变量进行独立操作。
解决方案是在开始时将句柄保存到setInterval
,并在设置新间隔之前将clearInterval
保存。
function startTimer(duration) {
$rootScope.timer = duration;
$rootScope.minute = 0;
$rootScope.second = 0;
$rootScope.Minutes = 0;
$rootScope.Seconds = 0;
// modified bit
if($rootScope.internvalhandle) clearInterval($rootScope.internvalhandle);
$rootScope.internvalhandle = setInterval(function () {
$rootScope.minute = parseInt($rootScope.timer / 60, 10)
$rootScope.second = parseInt($rootScope.timer % 60, 10);
$rootScope.Minutes = $rootScope.minute < 10 ? "0" +
$rootScope.minute : $rootScope.minute;
$rootScope.Seconds = $rootScope.second < 10 ? "0" +
$rootScope.second : $rootScope.second;
if (--$rootScope.timer < 0) {
$rootScope.timer = duration;
}
}, 1000);
}
startTimer(300);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.