【发布时间】:2017-02-17 16:46:13
【问题描述】:
我已经从this 问题的投票最多的答案中做了一个计时器。 问题是,当它达到 0 时,它会将日期更改为下一天并启动一个新的 24 小时计时器。
Tl;博士 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,我想到了两种解决方法。
首先(恕我直言更好)将在while 循环中给出setInterval(getTimeLeft, 1000);,条件为seconds_left >= 0。但我对此没有什么问题。
我不知道如何在函数之外传递变量。
我不知道阻止 setInterval 是否会做任何事情,但我不妨将间隔设置为 0(因此将其关闭)。
第二种方法是简单地在函数内部执行while:
while( seconds_left >= 0){
var time_left = new Date(seconds_left * 1000).toISOString().substr(11, 8);
}
问题:
- 浪费资源,因为JS脚本还在做中
@Edit 最终结果:
function getTimeLeft() {
var seconds_left = end_time - Math.floor(Date.now() / 1000);
if (seconds_left <= 0)
{
seconds_left = 0;
clearInterval(timer);
}
var time_left = new Date(seconds_left * 1000).toISOString().substr(11, 8);
$('#test-time-left').text(time_left);
}
var timer = setInterval(getTimeLeft, 1000);
我还将 seconds_left 设置为 0,以防脚本错过 0 秒帧(例如用户在倒计时发生时关闭浏览器)。
【问题讨论】:
标签: javascript ruby-on-rails countdowntimer