2015-02-24 76 views
0

我需要帮助。 我正在为我的游戏网站制作一个倒计时脚本,该脚本抓取数据库的结束时间并倒计时,直到当前时间等于数据库时间。 但我似乎无法让它停止,当它达到0. 我已经看着setTimeout(),我不明白我如何得到这个工作。停止jquery计时器,当它达到0

此外,当页面刷新时,它会从数据库时间再次启动计时器。我怎么会更新数据库到剩下的时间或停止刷新计时器。

非常感谢。下面是剧本我到目前为止

<?php 
include "header.php"; 

?> 
<html> 
<head> 
<script type="text/javascript"> 
var curTime = Math.floor((new Date()).getTime()/1000); // replaced with PHP time(), presumably 
var endTime = Math.floor((new Date()).getTime()/1000) + <?php echo $user_class->jail;?>; 

function tick() 
{ 
    var secs = endTime - cTime; 
    var mins = Math.floor(secs/60); 
    secs %= 60; 
    document.getElementById("ticker").innerHTML = 
     mins + " minutes, " + secs + " seconds"; 
    ++curTime; 
} 
</script> 
</head> 
<body onload="setInterval(tick,1000); tick();"> 
<h3>Time remaining is <span id="ticker"></span></h3> 

</body> 
</html> 

我的数据库通过cron目前更新每隔1分钟,因此能进能出,由于cron的。但我想知道是否有办法通过倒数来更新数据库,所以它会像其他定时器一样精确。

+0

clearInterval()? – Robert 2015-02-24 16:01:22

回答

1

如果()在你的周期结束将这个()函数

if(endTime < curTime) clearInterval(i); 

和将您的onload值更改为此。

<body onload="i = setInterval(tick,100); tick();"> 

clearInterval应该可以工作。 要当心这条线

var secs = endTime - cTime; 

这可能包含在您的ctime变种一个错字

var secs = endTime - curTime; 
+0

谢谢,这已经得到了计时器停止时,它到达0,但我不得不改变 to ,因为它快速倒计时秒数 – 2015-02-24 16:11:15

+0

哦,是的,我把它减少到100来测试我的小提琴。我忘了把它设回1000,抱歉:) – 2015-02-24 16:15:27

0

发现当你调用setInterval函数,它返回创建的计时器(它只是一个数字)的处理程序。你可以使用此处理停止计时器通过将其传递给clearInterval功能

例如:

timer = setTimeout(function() { console.log('hello'); }, 5000); 
... 
// This will stop timer 
clearInterval(timer); 
0

我重构你的代码了一下,不应该过多的混合HTML/JS/CSS/PHP 。

文件:xxx.php:

<?php include "header.php"; ?> 
<html> 
<head> 
</head> 

<body> 
<h3>Time remaining is <span id="ticker"></span></h3> 
<input id="end_time" type="hidden" value="<?php echo $user_class->jail; ?>" /> 

<script src="scripts.js"></script> 
</body> 
</html> 

文件:scripts.js中

window.onload = function() { 
    var timer; 
    var curTime = Math.floor((new Date()).getTime()/1000); // replaced with PHP time(), presumably 
    var endTime = Math.floor((new Date()).getTime()/1000) + document.getElementById('end_time').value; 

    function tick() { 
     var secs = endTime - curTime; 
     var mins = Math.floor(secs/60); 
     secs %= 60; 
     document.getElementById("ticker").innerHTML = 
      mins + " minutes, " + secs + " seconds"; 
     ++curTime; 
     if (curTime > endTime) { 
      stopTimer(); 
     } 
    } 
    function startTimer() { 
     timer = setInterval(tick,1000); 
    }  
    function stopTimer() { 
     clearInterval(timer); 
    } 
    startTimer(); 
};