1

我试图从数据库创建倒数计时器。我已将 deltaTimeServer 发送到 JS。输出是正确的,但它们冻结(不是倒计时,我必须按 F5)。对我有什么想法吗?

这是我的代码。

JS

<script type="text/javascript">
 function countDown(){  
     $(".show").each(function() {
          var elm = $(this);
          var difTime=this.timestamp;  
          var day=0,hours=0,minutes=0,seconds=0;  
          if(difTime>0){  
              day=Math.floor(difTime/84600);  
              hours=(Math.floor((difTime/3600))%24) + day*24 ;  
              minutes=Math.floor(difTime/60)%60;  
              seconds=Math.floor(difTime)%60;   
          }  
          else{  
              elm.removeClass("show"); //for remove class show
          }  
          elm.html(hours+' H '+minutes+' M '+seconds+' S ');  
      });
 }  
 function countDown_onLoad(){  
      $(".show").each(function() {
          this.timestamp = parseInt(this.firstChild.nodeValue,10);
      });
      setInterval(countDown,1000);
  }  
  $(document).ready(function() {  
      countDown_onLoad();  
  });  
</script>  

PHP

$show=mysql_query("SELECT * FROM `room_lists` WHERE `active` = 1");
while ($array = mysql_fetch_array($show))
{ 
   $timeStop = $array['timeStop'];
   $deltaTimeServer = strtotime($timeStop)-strtotime(date('Y-m-d H:i:s'));
   echo "<td align = 'center'><div class=\"show\">".$deltaTimeServer."</div></td>";
}
4

2 回答 2

0

您应该在 setInterval 的函数中获得新的时间戳。

于 2012-08-10T07:10:38.960 回答
0

你 JS 的问题是你的 difTime 总是一样的。您必须从原始时间戳中减去当前时间戳this.timestamp

但是,由于您每秒钟都在倒计时,所以它更容易。您可以减少时间戳:

var difTime=this.timestamp--;

那应该这样做。

此外,您可以更改此设置:

$deltaTimeServer = strtotime($timeStop)-strtotime(date('Y-m-d H:i:s'));

对此:

$deltaTimeServer = strtotime($timeStop)-time();

最后,当你在 PHP 中输​​出它时,我会隐藏tdstyle="display:none"。一旦设置了时间戳,您就可以清除td并显示它 - 这样人们就不会看到变成计数器的时间戳。

于 2012-08-10T07:21:38.960 回答