【问题标题】:Countdown Timer, setInterval within setInterval?倒数计时器,setInterval 内的 setInterval?
【发布时间】:2013-12-10 20:58:22
【问题描述】:

我是这里的 JS 新手,正在研究一个在给定时间段后开始的倒数计时器。基本上,当用户点击一个按钮时,一个时钟开始,当第一个计时器用完时,第二个时钟开始。我知道“setInterval”是实现这一目标的最佳方式。我面临的主要问题是第二个计时器虽然会在屏幕上弹出,但不会开始倒计时。我相信这是因为我试图在 setInterval 中运行 setInterval,但不确定。前置计时器也在 1 而不是 0 处“发出哔哔声”。下面是代码。当按下表单按钮时,倒计时功能开始。

<script>

function countdown(form){
    lead = form.leadseconds.value;
    cd = form.cdseconds.value;
    startLeader = setInterval(leadtimer, 1000);
}

function leadtimer(){
    if (lead > 0){
        document.getElementById("leadtime").innerHTML = lead;
        lead--;
    }
    if (lead == 0){
        document.getElementById("leadtime").innerHTML = "beep";
        startTimer = setInterval(cdtimer, 1000);
        clearInterval(startLeader);
    }

}

function cdtimer(){
    if (cd > 0){
        document.getElementById("cdtime").innerHTML = cd;
        lead--;
    }
    if (cd == 0){
        document.getElementById("cdtime").innerHTML = "beepbeep";
        clearInterval(startTimer);
    }

}

 </script>

任何帮助将不胜感激。谢谢!

【问题讨论】:

  • 为什么是if (cd &gt; 0) { lead--; }
  • 您是否在某处声明了全局变量(leadcdstartLeaderstartTimer)?
  • 你明白了!正在减少 cdtimer 函数中的错误变量。谢谢!!!

标签: javascript timer setinterval


【解决方案1】:

第一个问题:你会提前一秒听到“哔”声,因为当lead 到达1 时,第一个 if (lead &gt; 0) 照常发生,并且lead 递减。 lead 现在等于零。然后执行移动到第二个 if。由于您刚刚将 lead 减为零,因此如果 body 也被执行。你想要一个“else if”,所以只有两个块中的一个会执行。像这样:

if ( lead > 0 ) {
    //  Do stuff. 
    lead--;
} else if ( lead == 0 ) {
    //  Do other stuff. 
}

其次,在cdtimer() 中,您正在递减leadlead--;。我猜这是你复制第一个计时器函数并重命名它时出现的错误。至少,我总是这样写代码。

当然,您还想在cdtimer() 中使用else if

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-29
    • 2017-11-05
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    • 2022-01-23
    相关资源
    最近更新 更多