如何设置间隔时间?
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);
我为计时器使用了以下功能
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);