【问题标题】:settimeout call function for canvas timer画布计时器的 settimeout 调用函数
【发布时间】:2013-10-13 21:37:40
【问题描述】:

我编写了这段代码,但 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>

谢谢

【问题讨论】:

    标签: javascript html canvas settimeout


    【解决方案1】:

    代码

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

    ...调用 timer 函数并将其返回值传递给setTimeout,与foo(bar()) 调用 bar 并将其返回值传递给foo。由于您的timer 函数(隐式)返回undefined,而setTimeout 在您传递undefined 时不执行任何操作,因此调用timer(立即)然后什么也不执行。

    如果您想以sec+0.03 作为参数来安排对timer 的调用,请创建一个执行此操作的函数:

    setTimeout(function() {
        timer(sec+0.03);
    }, 1000);
    

    【讨论】:

    • 谢谢,一直有这个问题
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2015-06-26
      • 2019-05-11
      • 2022-01-26
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 2011-02-10
      • 1970-01-01
      相关资源
      最近更新 更多