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