Javascript计时器没有停止
下面的脚本将倒计时,但在到达结束时间时不会停止计数。 当它达到零时,它将从60:00再次启动到0(另一个小时)。 当我跳过这个部分Javascript计时器没有停止,javascript,php,counter,Javascript,Php,Counter,下面的脚本将倒计时,但在到达结束时间时不会停止计数。 当它达到零时,它将从60:00再次启动到0(另一个小时)。 当我跳过这个部分 $time = str_replace(' ', 'T', $db[time]); 这样做: var end = new Date('<?=$db[time]?>'); 剧本: $time = str_replace(' ', 'T', $db[time]); Java脚本 <script> var end = new Date('&
$time = str_replace(' ', 'T', $db[time]);
这样做:
var end = new Date('<?=$db[time]?>');
剧本:
$time = str_replace(' ', 'T', $db[time]);
Java脚本
<script>
var end = new Date('<?=$time?>');
var _second = 1000;
var _minute = _second * 60;
var _hour = _minute * 60;
var _day = _hour * 24;
var timer;
function showRemaining() {
var now = new Date();
var distance = end - now;
if (distance < 0) {
clearInterval(timer);
document.getElementById('countdown').innerHTML = 'ITS NOW TIME!</font><BR><BR>';
return;
}
var days = Math.floor(distance / _day);
var hours = Math.floor((distance % _day) / _hour);
var minutes = Math.floor((distance % _hour) / _minute);
var seconds = Math.floor((distance % _minute) / _second);
document.getElementById('countdown').innerHTML = '<font color="orange">' + minutes + ':';
document.getElementById('countdown').innerHTML += '<font color="orange">' + seconds + ' minutes</font>';
}
timer = setInterval(showRemaining, 1000);
</script>
var结束=新日期(“”);
var_秒=1000;
var _minute=_second*60;
变量(小时)=(分钟)*60 ;;
var _日=_小时*24;
无功定时器;
函数showLeving(){
var now=新日期();
var距离=结束-现在;
如果(距离<0){
清除间隔(计时器);
document.getElementById('countdown').innerHTML='现在是时候了!
';
返回;
}
var天数=数学楼层(距离/天数);
var小时=数学楼层((距离%\u天)/\u小时);
var分钟=数学楼层(距离%\u小时)/\u分钟);
var秒=数学楼层((距离%\u分钟)/\u秒);
document.getElementById('countdown')。innerHTML=''+minutes+':';
document.getElementById('countdown')。innerHTML+=''+秒数+'分钟数';
}
定时器=设置间隔(显示剩余,1000);
我建议您使用
var countInterval=setInterval(函数(){countdown(secondsRemaining);},1000)
这样,您就不必使用日期或时间对象。只要在
countdown()
和clearInterval(countInterval)
中保持一个计数,一旦你达到60
我对你的innerHTML用法有点怀疑。这个脚本在HTML中的位置是什么?我感觉在设置innerHTML后,它会被重新评估。您可以通过在setInterval
旁边放置console.log(“Started!”)
语句来测试该理论
另外,请看这里:
document.getElementById('countdown').innerHTML = 'ITS NOW TIME!</font><BR><BR>';
document.getElementById('countdown')。innerHTML='现在是时候了
';
您正在“设置”(替换)元素的innerHTML,使其包含:文本,然后是关闭字体标记。那可能会把你的DOM搞砸。最后,您不应该在两行中设置innerHTML两次——在函数中设置一次,可能是基于变量
(澄清一下:单独使用innerHTML并不是最糟糕的事情——但是对于格式错误的HTML,或者通过在继承者权限中调整过高的元素,可能会产生意想不到的效果)您实际上是在建议将函数引用替换为必须为eval()的字符串-执行前是否执行?我建议计算独立于浏览器的后端上剩余的秒数,并在前端执行简单的setInterval。但最佳做法是使用函数引用作为
setInterval
的第一个参数。。。而OP已经做到了。但是你用一个字符串替换了它,这被认为是不好的实践好的洞察力——没有必要比较日期。函数引用优于代码字符串,但这种方法是合理的。@devnull69是的,在快速搜索之后,我同意你的看法。我更新了我的示例。在jsbin上检查一下:这段代码运行良好。问题一定出在其他地方了,请参阅Katana314对您将innerHTML
与格式错误的HTML一起使用这一事实的评论。innerHTML的每一项分配都应包含格式良好的HTML,否则浏览器将更改您的HTML,使其在以后成为“格式良好”(或与您的意图有关的格式不正确)
document.getElementById('countdown').innerHTML = 'ITS NOW TIME!</font><BR><BR>';