javascript中的倒计时

javascript中的倒计时,javascript,Javascript,我有一段代码,在这个示例1111中应该倒计时一些数字,并将其写入span id=timeframe。但它不起作用,我不知道为什么。你能告诉我我的错在哪里吗 <script language="JavaScript"> <!-- var txt_minute = "Min"; var txt_second = "s"; var time_left = 1111; var temp=timeleft; houres = Math.

我有一段代码,在这个示例1111中应该倒计时一些数字,并将其写入span id=timeframe。但它不起作用,我不知道为什么。你能告诉我我的错在哪里吗

<script language="JavaScript">
  <!--
  var txt_minute = "Min";
  var txt_second = "s";
  var time_left = 1111;
    var temp=timeleft;
              houres = Math.floor(temp / 3600); 
              temp %= 3600;
              minutes = Math.floor(temp / 60)";
              temp %= 60;
              seconds= temp;

function display()
{
    time_left -= 1;
    if (seconds <= 0) {
        seconds = 59;
        minutes -= 1;
    } else {
        seconds -= 1;
    }
if (minutes <= 0){
minutes=59;
houres-=1;
}

    if (time_left <= 0) {
        seconds = 0;
    }



    if (time_left > 0) {
        document.getElementById("timeframe").innerHTML = houres +" hours" + minutes + " " + txt_minute + " " + seconds + " " + txt_second;
    } else {
        window.location.reload();
    }
    setTimeout("display()",1000);
}

display();

//-->
</script>

我突然想到的一件事是,你在顶部的计算从var temp开始。。。应该在显示函数中,该函数可能需要一个新名称。在那里,只做一次。我也不相信实际的计算是正确的。事实上,代码总体上并不理想,您可能不想从任何地方获得更多的代码。但我不会为了这个答案重写它

另请参见n00b32的答案,顶部附近似乎有语法错误


另外,OT:您可以将setTimeout更改为:setTimeoutdisplay,1000。不需要引号和括号。

有一些较小的错误:

分钟=Math.floortemp/60; 后面有一个不应该出现的引号。 var temp=时间限制; 那应该是你离开的时间了。 您还应该使用setTimeout引用函数,而不是要求它将文本解析为代码:setTimeoutdisplay,1000; 编辑:我写了一个小而清晰的倒计时脚本

function startCountdown ( timeLeft )
{
    var interval = setInterval( countdown, 1000 );
    update();

    function countdown ()
    {
        if ( --timeLeft > 0 )
            update();
        else
        {
            clearInterval( interval );
            update();
            completed();
        }
    }

    function update ()
    {
        hours   = Math.floor( timeLeft / 3600 );
        minutes = Math.floor( ( timeLeft % 3600 ) / 60 );
        seconds = timeLeft % 60;

        alert( '' + hours + ':' + minutes + ':' + seconds );
    }

    function completed ()
    {
        alert( 'completed' );
    }
}
startCountdown( 1234 );
只需根据您的需要更改更新和完成的函数,然后用您想要的值开始倒计时


顺便说一句,如果您想更改代码中某个元素的某些innerHTML,您应该将引用保存在某个地方,而不是每次调用都通过DOM获取引用。

上面提到的所有输入错误和一个逻辑缺陷

如果代码位于html的head部分,那么第一次调用display时,尚未创建timeframe元素

而不是展示;使用window.onload=display;在加载dom后首次运行它


这是您的代码的固定工作版本

作为一个额外的改进,但首先通过阅读其他人的评论让基本版本工作,我想替换这一行

   setTimeout(display, 1000);
为此:

   var next = 1010 - (new Date()).getTime() % 1000;
   setTimeout(display, next);

由于其他进程正在运行以及setTimeout中的其他错误,第一个版本永远不会完全每秒运行一次。当一个显示调用发生在第n秒的末尾,而下一个显示调用仅发生在第n+2秒的开头时,这会使显示一次跳转2秒。第二个版本将当前时间缩短到毫秒,并尝试在每秒钟开始后安排下一次调用display,从而使显示更加平滑。

什么不起作用?它是否显示不正确?完全崩溃?输出不正确?只是从来没有出现过?如果你想让你的计时器更准确,可以使用Date对象和更低的间隔频率。JavaScript计时器不适合倒计时:-第三个是装饰性的;D作为OP的旁注:读取错误消息!!如果他们不是你真的搞砸了的人,他们的信息最丰富。第三个不是化妆品。你应该避免任何形式的暴力eval@n00b32:这不完全是装饰性的,JavaScript解释器基本上每次都要对此进行评估。这不是什么大不了的事,但也不仅仅是表面上的。@T.J.克劳德:我知道;但在这种情况下,这并不重要。尽管您是正确的,但即使在简单的脚本中也最好编写好的代码。
   var next = 1010 - (new Date()).getTime() % 1000;
   setTimeout(display, next);