我有一个计时器的代码,我试图让它停在0:0但它继续进入负数。任何解决这个问题的想法都会有所帮助。
<html>
<head>
<script>
function startTimer(m,s)
{
document.getElementById('timer').innerHTML= m+":"+s;
if (s==0)
{
if (m == 0)
{
clearTimeout(t);
}
else if (m != 0)
{
m = m-1;
s = 60;
}
}
s = s-1;
t=setTimeout(function(){startTimer(m,s)},1000);
}
</script>
</head>
<body>
<button onClick = "startTimer(0,5)">Start</button>
<p id = "timer">00:00</p>
</body>
</html>
答案 0 :(得分:4)
你总是在startTimer
结束时开始一个新的计时器,即使你达到零。快速解决方法是在之后添加return;
而不是clearTimeout(t);
。
答案 1 :(得分:0)
你可以在外部使用超时功能,并在时间大于0:0时调用它,如下所示:
function startTimer(m,s)
{
document.getElementById('timer').innerHTML= m+":"+s;
if (s==0)
{
if (m == 0)
{
alert('done');
}
else if (m != 0)
{
m = m-1;
s = 60;
t();
}
}
s = s-1;
t();
function t(){setTimeout(function(){startTimer(m,s)},1000)};
}
或速记版本:
function startTimer(m,s)
{
document.getElementById('timer').innerHTML= m+":"+s;
(s == 0) ? (m == 0 ? alert('done') : (m--, s = 60, t())) : (s--, t());
function t(){ setTimeout(function(){startTimer(m,s)},1000)};
}
答案 2 :(得分:0)
只是评论 - 这个功能可以更加苗条:
function pad(n) {
return (n<10? '0':'') + n;
}
function startTimer(m,s) {
document.getElementById('timer').innerHTML = pad(m) + ":" + pad(s);
s -= s? 1 : m-- && -59;
if (m != -1)
setTimeout(function(){startTimer(m,s)},1000);
}
它会慢慢漂移,因为setTimeout没有在指定的时间运行,因此它应该使用日期对象将滞后调整到下一整秒。
答案 3 :(得分:-1)
这是我写的旧代码:
function CountDown(TimeToCount){
if(First)
{
var startDatum=new Date();
First = false;
date.a = startDatum;
bye = TimeToCount-200;
}
if(bye > 0 && CDown){
var zielDatum=new Date();
bye =Math.abs(Math.floor(( ((zielDatum-(TimeToCount-200)-date.a)/1000) - 0.1)*10)/10);
if ( bye * 10 % 10 ==0)
$(".CountDown").html(bye+".0");
else
$(".CountDown").html(bye);
setTimeout(function(){CountDown(TimeToCount)},20);
}
else
{ $(".CountDown").html("0.0");
}
}`