我试图从数据库创建倒数计时器。我已将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>";
}
答案 0 :(得分:0)
你应该在setInterval函数中获得新的时间戳。
答案 1 :(得分: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中输出时,我会隐藏td
和style="display:none"
。设置时间戳后,您可以清除td
并显示它 - 这样人们就不会看到变成计数器的时间戳。