以下是一个可正常工作的JavaScript倒计时器:
<h1><span id='countdown'><?php echo $dbSessionDuration; ?></span></h1>
...
$(document).ready(function() {
var time = <?php echo json_encode($dbSessionDuration); ?>,
parts = time.split(':'),
hours = +parts[0],
minutes = +parts[1],
seconds = +parts[2],
span = $('#countdown');
function correctNum(num) {
return (num<10)? ("0"+num):num;
}
var timer = setInterval(function(){
seconds--;
if(seconds == -1) {
seconds = 59;
minutes--;
if(minutes == -1) {
minutes = 59;
hours--;
if(hours==-1) {
alert("timer finished");
clearInterval(timer);
return;
}
}
}
span.text(correctNum(hours) + ":" + correctNum(minutes) + ":" + correctNum(seconds));
}, 1000);
});
现在我想做的是利用上面的例子来进行操作,实现相反的功能 - 创建一个以 00:00:00 (小时、分、秒) 开始的计时器。
但问题是它没有工作。什么都没有发生。我不知道在下面的函数中是否需要小时数,因为作为倒计时,小时数可以增加到任意多小时。但我的问题是如何修复这个计时器,使其完全正常工作?
<p><input type='text' class='responseTime' name='responsetime' value='00:00:00' /></p>
...
$(document).ready(function() {
var response = "00:00:00",
parts = time.split(':'),
hours = +parts[0],
minutes = +parts[1],
seconds = +parts[2],
input = $('.responseTime');
function correctResponse(responsenum) {
return (responsenum<10)? ("0"+responsenum):responsenum;
}
var responsetimer = setInterval(function(){
seconds--;
if(seconds == +59) {
seconds = 00;
minutes--;
if(minutes == +59) {
minutes = 00;
hours--;
return;
}
}
input.text(correctResponse(hours) + ":" + correctResponse(minutes) + ":" + correctResponse(seconds));
}, 1000);
});
更新:
另外需要注意的是,我发现倒计时器每秒钟实际上在以2秒的速度倒数。如何解决这个问题并将其包含在计时器中?
下面的代码我已经更改,包括增量++和使用.val而不是.text,但它开始于00:00:00,然后仅降到00:59:60,最后停止运行:
var response = "00:00:00",
parts = time.split(':'),
hours = +parts[0],
minutes = +parts[1],
seconds = +parts[2],
input = $('.responseTime');
function correctResponse(responsenum) {
return (responsenum<10)? ("0"+responsenum):responsenum;
}
var responsetimer = setInterval(function(){
seconds++;
if(seconds == +59) {
seconds = 00;
minutes++;
if(minutes == +59) {
minutes = 00;
hours++;
return;
}
}
input.val(correctResponse(hours) + ":" + correctResponse(minutes) + ":" + correctResponse(seconds));
}, 1000);
});
time = "00:00:00"
。这对我有效。 - tcooc