0

我写了这段代码,但 setTimeout 延迟调用函数有问题
这是一个计时器,但 setTimeout 不能每秒工作
为什么?

<head>
<script>
function timer(sec) {
    var c = document.getElementById("arcTimer");
    var ctx = c.getContext("2d");
    ctx.clearRect(0,0,200,200);
    ctx.lineWidth = 20;
    ctx.strokeStyle = "#0066CC";
    ctx.beginPath();
    ctx.arc(100,100,75,-0.5*Math.PI,sec*Math.PI);
    ctx.stroke();
    if ( sec >= 1.5 ) {
        sec = -0.5;
    }
    setTimeout(timer(sec+0.03),1000);
}
</script>
</head>
<body onLoad="timer(-0.5);">

<canvas width="200" height="200" id="arcTimer" ></canvas>

</body>

谢谢

4

2 回答 2

1

编码

setTimeout(timer(sec+0.03),1000);

...调用timer函数并将其返回值传递给,setTimeoutfoo(bar()) 调用bar 并将其返回值传递给foo. 由于您的timer函数(隐式)返回undefined,并且setTimeout在您传递它时不做任何事情undefined,因此调用timer(立即)然后什么也不做。

如果您想安排调用timerwithsec+0.03作为其参数,请创建一个执行此操作的函数:

setTimeout(function() {
    timer(sec+0.03);
}, 1000);
于 2013-10-13T21:41:46.063 回答
0

这一行是错误的: setTimeout(timer(sec+0.03),1000); 第一个参数未定义,不是函数。

于 2013-10-13T21:45:33.627 回答