Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript计时器没有停止_Javascript_Php_Counter - Fatal编程技术网

Javascript计时器没有停止

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('&

下面的脚本将倒计时,但在到达结束时间时不会停止计数。 当它达到零时,它将从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?>');
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>';