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

JSの問題は、difTimeが常に同じであるということです。元のタイムスタンプから現在のタイムスタンプを差し引く必要がありますthis.timestamp

ただし、毎秒カウントダウンするため、さらに簡単です。タイムスタンプをデクリメントするだけです。

var difTime=this.timestamp--;

そして、それはそれを行う必要があります。

また、これを変更できます。

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

これに:

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

最後に、PHPで出力するときにtdwithを非表示にします。style="display:none"タイムスタンプが設定されると、をクリアしてtd表示できます。これにより、カウンターに変わるタイムスタンプが表示されなくなります。

于 2012-08-10T07:21:38.960 に答える
0

setInterval の関数で新しいタイムスタンプを取得する必要があります。

于 2012-08-10T07:10:38.960 に答える