Javascript计时器停止在1,而不是继续到0
我一直在尝试让这个javascript倒计时工作,并让它从3倒计时到1,但是我不明白为什么它不一直倒计时到0 为什么它会停在1,如何让它完全倒计时?Javascript计时器停止在1,而不是继续到0,javascript,html,timer,countdown,Javascript,Html,Timer,Countdown,我一直在尝试让这个javascript倒计时工作,并让它从3倒计时到1,但是我不明白为什么它不一直倒计时到0 为什么它会停在1,如何让它完全倒计时? <body> <p>Time left: <span id="time">3</span> seconds.</p> <p><a href="#" onclick="play()">Play</a> <a href="#" onclick="pau
<body>
<p>Time left: <span id="time">3</span> seconds.</p>
<p><a href="#" onclick="play()">Play</a> <a href="#" onclick="pause()">Pause</a></p>
<script>
var time = 3,
timeElement = document.getElementById('time'),
timer = null;
var updateTimer = function() {
timeElement.innerHTML = time--;
if (time === 0) {
clearInterval(timer);
}
}
function play() {
timer = setInterval(updateTimer, 1000);
return false;
}
function pause() {
clearInterval(timer);
return false;
}
</script>
</body>
剩余时间:3秒
var时间=3,
timeElement=document.getElementById('time'),
定时器=空;
var updateTimer=function(){
timeElement.innerHTML=时间--;
如果(时间==0){
清除间隔(计时器);
}
}
函数播放(){
定时器=设置间隔(更新定时器,1000);
返回false;
}
函数暂停(){
清除间隔(计时器);
返回false;
}
您还可以测试我在这里制作的JSFIDLE:
谢谢你的帮助 使用前缀而不是后缀减量:
timeElement.innerHTML = --time;
这与前缀和后缀递增/递减运算符之间的语义差异有关。它们都按预期递增/递减变量的值,但当用作表达式时,它们的计算结果并不相同 前缀递增/递减都以大多数人期望的方式运行:它们调整变量的值,然后计算为新值
var x = 5;
console.log(++x); // 6
console.log(x); // 6
后缀运算符的直观性稍差一些。它们仍然以相同的方式修改值,但是当用作表达式时,它们在修改变量之前计算变量的值
var x = 5;
console.log(x++); // 5
console.log(x); // 6
在您的代码中,当time
达到0时,后缀表达式仍然会产生上一个值1,使得timeElement
的值仍然显示为1,但仍然结束循环。将表达式转换为使用前缀减量修复了该问题
或者,您也可以将其拆分为两个语句
time--;
timeElement.innerHTML = time;
使用前缀而不是后缀减量:
timeElement.innerHTML = --time;
这与前缀和后缀递增/递减运算符之间的语义差异有关。它们都按预期递增/递减变量的值,但当用作表达式时,它们的计算结果并不相同 前缀递增/递减都以大多数人期望的方式运行:它们调整变量的值,然后计算为新值
var x = 5;
console.log(++x); // 6
console.log(x); // 6
后缀运算符的直观性稍差一些。它们仍然以相同的方式修改值,但是当用作表达式时,它们在修改变量之前计算变量的值
var x = 5;
console.log(x++); // 5
console.log(x); // 6
在您的代码中,当time
达到0时,后缀表达式仍然会产生上一个值1,使得timeElement
的值仍然显示为1,但仍然结束循环。将表达式转换为使用前缀减量修复了该问题
或者,您也可以将其拆分为两个语句
time--;
timeElement.innerHTML = time;
时间=3,递减为2,输出2。时间=2,递减为1,输出1。时间=1,递减到0,输出0,完成时间=3,递减到2,输出2。时间=2,递减为1,输出1。时间=1,递减为0,输出0,结束