Javascript 倒计时功能不显示3-2-1倒计时中的最后一个数字

Javascript 倒计时功能不显示3-2-1倒计时中的最后一个数字,javascript,html,Javascript,Html,和标题差不多。当倒计时开始时,它将变为3、2,然后执行当计时器达到零时应该启动的函数,跳过数字1的显示 实际的计时器输出显示在单独的div元素中,您将在下面的代码中看到 我在这里看到了一些关于错误倒计时时钟的答案,但其中很多都使用jQuery,而我只是使用普通JavaScript,库的使用对我来说仍然有点混乱 var计数=3; 功能启动器{ var timer=setIntervalfunction{startTimercount;},1000; ifcount==0{ 间隔定时器; ranC

和标题差不多。当倒计时开始时,它将变为3、2,然后执行当计时器达到零时应该启动的函数,跳过数字1的显示

实际的计时器输出显示在单独的div元素中,您将在下面的代码中看到

我在这里看到了一些关于错误倒计时时钟的答案,但其中很多都使用jQuery,而我只是使用普通JavaScript,库的使用对我来说仍然有点混乱

var计数=3; 功能启动器{ var timer=setIntervalfunction{startTimercount;},1000; ifcount==0{ 间隔定时器; ranCoord;//当计时器为零时运行的函数。 }否则{ document.getElementByIdtarget.innerText=计数; 计数-; } } 您不需要在设置间隔内调用startTimer

var计数=3; 功能启动器{ var定时器=设置间隔功能{ 如果计数===0{ 间隔定时器; ranCoord;//当计时器为零时运行的函数。 }否则{ document.getElementByIdtarget.innerText=计数; 计数-; } }, 1000; } 功能性酸败{ console.logTimer命中0 } img{ 高度:100px; 宽度:100px; 轮廓:1px纯蓝色; }
我认为你不需要添加更多的代码,你只需要像那样简化它

    var count = 3;
    function startTimer() {
        const timer = setInterval(function () {
            document.getElementById("target").innerText = count;
            count--;
            if (count <= 0) {
                clearInterval(timer);
                ranCoord();
            }
        }, 1000)
    }

如果count变量在startTimer函数中声明,则计时器的每次迭代都将覆盖其计数值,因此不会倒计时

setInterval无限期地重复其函数,因此只需要在循环外调用一次,而setTimeout只运行一次,每次迭代都需要调用

使用setTimeout的另一种方法是:

function startTimer(count) {
    if (count <= 0) {
        ranCoord();
    } else {
        document.getElementById("target").innerText = count;
        setTimeout(function() { startTimer(--count); }, 1000);
    }
}

此版本还避免使用全局变量,将剩余的计数作为参数传入。

尝试使用调试器一点。放置断点并尝试了解发生了什么。查找超时与间隔。然后我很乐意帮助您主要的问题是您多次调用setInterval,这意味着您将启动一系列并行运行的间隔。两个将运行,两个递减计数,使其跳过1。固定版本:另外,在函数中声明一个var意味着该var将在函数结束时停止存在,然后在函数运行时用初始值重新创建again@Akxe谢谢你的建议。我用一个调试器稍微解决了一些问题,尽管我仍然无法找出哪里出了问题,但它帮助我看到了出现问题的代码的位置。另外,查看超时与间隔也有帮助。@ChrisG我看了一下您的固定版本,它更有意义。相比之下,我原来的代码现在看起来很混乱!虽然我的3-2-1倒计时现在返回undefined,NaN,NaN,但这是一个有用的了解方法。更新:在第一次调用函数时,我没有将3作为参数传递给它。现在很好用,谢谢!