Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript计时器停止在1,而不是继续到0_Javascript_Html_Timer_Countdown - Fatal编程技术网

Javascript计时器停止在1,而不是继续到0

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

我一直在尝试让这个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="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,结束