我已经根据this问题的最多投票答案做了一个计时器。 问题是,当它达到0时,它会将日期更改为第二天并启动一个新的24小时计时器。
铊;博士 00:00:00 - > 23:59:59而不是永远停留在00:00:00。
我目前的代码:
function getTimeLeft() {
var seconds_left = end_time - Math.floor(Date.now() / 1000);
var time_left = new Date(seconds_left * 1000).toISOString().substr(11, 8);
$('#test-time-left').text(time_left);
}
setInterval(getTimeLeft, 1000);
为了保持00:00:00,我想到了两种解决方法。
首先(并且非常好)将在条件为setInterval(getTimeLeft, 1000);
的{{1}}循环中提供while
。但我对此几乎没有问题。
我不知道如何在函数之外传递变量。
我不知道是否阻止setInterval会做任何事情,但我不妨将间隔设置为0(ergo将其关闭)。
第二种方法只是在函数内部执行seconds_left >= 0
:
while
问题:
@Edit最终结果:
while( seconds_left >= 0){
var time_left = new Date(seconds_left * 1000).toISOString().substr(11, 8);
}
我还将seconds_left设置为0,以防脚本错过0秒帧(例如用户在倒计时时关闭浏览器)。
答案 0 :(得分:1)
假设你想在seconds_left
等于0时停止计时器,你可以简单地清除间隔:
function getTimeLeft() {
var seconds_left = end_time - Math.floor(Date.now() / 1000);
var time_left = new Date(seconds_left * 1000).toISOString().substr(11, 8);
if(seconds_left === 0) {
clearInterval(timer); // clear the interval
}
$('#test-time-left').text(time_left);
}
var timer = setInterval(getTimeLeft, 1000); //save the timer in a variable
请注意,您使用while循环的想法将不工作:
while( seconds_left >= 0){
var time_left = new Date(seconds_left * 1000).toISOString().substr(11, 8);
}
JavaScript是单线程的,这意味着在while
循环运行时,区间代码将不运行,因此会产生无限循环(并可能导致浏览器崩溃)。
答案 1 :(得分:0)
我同意Rick Hithcock所说的一切。这是一个基于您的代码的示例,该代码将计时器设置为10秒,然后倒计时。
var end_time = new Date();
end_time.setSeconds(end_time.getSeconds() + 10);
function getTimeLeft() {
var now = new Date();
var seconds_left = (end_time - now) / 1000;
if (seconds_left <= 1) {
clearInterval(timerID);
}
var time_left = new Date(seconds_left * 1000).toISOString().substr(11, 8);
$('#test-time-left').text(time_left);
}
timerID = setInterval(getTimeLeft, 1000);