如何在达到零时停止计时器
How to stop timer after reaching zero?
在这个http://jsfiddle.net/kuox9ax2/中,我有一个倒计时计时器。
- 当它达到零时,它重新开始。它不应该这样做。
- 由于JS是异步的,我不知道如何让它调用一个函数只有当它已经达到零。
我曾尝试在startTimer()
中作为return true
,但后来我遇到JS是异步的,所以它立即返回true。
谁能告诉我如何解决这两个问题?
function startTimer(duration, display) {
var timer = duration, minutes, seconds;
setInterval(function() {
minutes = parseInt(timer / 60, 10)
seconds = parseInt(timer % 60, 10);
minutes = minutes < 10 ? "0" + minutes : minutes;
seconds = seconds < 10 ? "0" + seconds : seconds;
display.textContent = minutes + ":" + seconds;
if (--timer < 0) {
timer = duration;
}
}, 1000);
}
window.onload = function() {
var time = 5, display = document.querySelector('#time');
var isDone = startTimer(time, display);
if (isDone) {
alert("a");
}
};
<div>Timeout in <span id="time">00:00</span> minutes</div>
将您的间隔存储在一个变量中,当达到0时调用clearInterval
。Javascript函数可以作为参数传递,通常称为回调函数。只需传递一个函数作为参数,并在需要时调用它。
function startTimer(duration, display, callback) {
var timer = duration,
minutes, seconds;
var myInterval = setInterval(function() {
minutes = parseInt(timer / 60, 10)
seconds = parseInt(timer % 60, 10);
minutes = minutes < 10 ? "0" + minutes : minutes;
seconds = seconds < 10 ? "0" + seconds : seconds;
display.textContent = minutes + ":" + seconds;
if (--timer < 0) {
timer = duration;
// clear the interal
clearInterval(myInterval);
// use the callback
if(callback) {
callback();
}
}
}, 1000);
}
window.onload = function() {
var time = 5,
display = document.querySelector('#time');
startTimer(time, display, function() { alert('done'); });
};
<div>Timeout in <span id="time">00:00</span> minutes</div>
您可以使用WindowTimers.clearInterval()
function startTimer(duration, display) {
var timer = duration, minutes, seconds;
var myInterval = setInterval(function() {
minutes = parseInt(timer / 60, 10)
seconds = parseInt(timer % 60, 10);
minutes = minutes < 10 ? "0" + minutes : minutes;
seconds = seconds < 10 ? "0" + seconds : seconds;
display.textContent = minutes + ":" + seconds;
if (--timer < 0) {
clearInterval(myInterval);
doneFunction();
}
}, 1000);
}
window.onload = function() {
var time = 5, display = document.querySelector('#time');
startTimer(time, display);
};
function doneFunction(){
console.log("done !");
}
<div>Timeout in <span id="time">00:00</span> minutes</div>
您不能强制异步方法在异步操作完成后返回—这样做是一种反模式。
相反,您可以将函数传递给方法,以便在异步操作完成时执行。您还需要存储对setInterval()
的引用,并在计时器达到零时调用clearInterval()
。试试这个:
function startTimer(duration, display, callback) {
var timer = duration, minutes, seconds;
var interval = setInterval(function() {
var minutes = parseInt(timer / 60, 10)
var seconds = parseInt(timer % 60, 10);
display.textContent = ("00" + minutes).slice(-2) + ":" + ("00" + seconds).slice(-2);
if (minutes === 0 && seconds === 0) {
clearInterval(interval);
callback && callback();
}
timer--;
}, 1000);
}
window.onload = function() {
var time = 5, display = document.querySelector('#time');
startTimer(time, display, function() {
console.log("timer reached zero");
});
};
<div>Timeout in <span id="time">00:00</span> minutes</div>
相关文章:
- 如何在窗体打开时从javascript倒计时计时器值中节省时间
- 设置倒计时计时器,IE出现问题
- MobileFirst:在客户端运行计时器作业-最佳选项
- 显示具有服务器端自动时间注销的同步倒计时计时器
- 倒计时计时器应该持续两个php页面
- 在Jquery倒计时计时器上设置每个数字的动画
- 我如何才能确保计时器设置为每天4点半,所以我不会;不用在Javascript中提及某个日期
- 如何禁用窗口.当计时器超时时,打开卸载警报
- 在Nodejs中为许多用户处理计时器
- 如果弹出窗口关闭,Javascript停止/重置计时器
- 如何在隐藏时暂停jquery计时器
- Javascript倒计时计时器倒计时未正确更新秒/分钟
- 计时器循环从不运行
- Progressbar计时器,仅在页面刷新时重新加载
- 创建一个倒计时计时器脚本,该脚本计算声音文件的持续时间,而不是特定的日期
- 计时器达到零时不会结束
- 当php中的计时器使用javascript达到零时,不调用Submit方法
- 如何在达到零时停止计时器
- 当时间接近零时,通过改变计时器的颜色或动画通知用户
- 计时器倒计时为零时更新数据库