【问题标题】:Why javascript setTimeout delay is not working and setInterval is too slow为什么 javascript setTimeout 延迟不起作用并且 setInterval 太慢
【发布时间】:2013-08-03 17:54:19
【问题描述】:
    function paint(ctx, canvas) {
    var veces = 0;
    var interval = 1000;
    dibujo();
    function dibujo() {
        var lado1 = Math.floor((Math.random() * 300) + 1);
        var lado2 = Math.floor((Math.random() * 300) + 1);
        ctx.strokeStyle = '#' + Math.floor(Math.random() * 16777215).toString(16);
        ctx.strokeRect((canvas.width / 2) - (lado1 / 2),
            (canvas.height / 2) - (lado2 / 2),
            lado1,
            lado2);
        veces++;
        if (veces < 1000) {
            setTimeout(dibujo(), interval);
        }
    }
}

我的 setTimeout 的完整代码FIDDLE

我的 setInterval FIDDLE 的完整代码

我做错了什么?

【问题讨论】:

    标签: javascript html canvas settimeout setinterval


    【解决方案1】:

    除了 Pointy 的回答。由于 js 的单线程架构,你永远不会在 setInterval 中获得 0ms 的步骤,在某些浏览器中这将接近 0ms,但它永远不会与向下查看浏览器直到完成的循环相同。

    在我的 chrome 中平均为 5.3 毫秒,在我的 IE10 中平均为 3.4 毫秒。也许这就是您所说的“setInterval 太慢”的意思。

    【讨论】:

      【解决方案2】:

      你打电话给setTimeout不正确:

          setTimeout(dibujo, interval); // no ()
      

      您必须传递对您的函数的引用,这是通过使用函数的名称来完成的。您不想要(),因为这会导致函数在调用setTimeout 发生之前被调用,并传入函数的返回值而不是对函数的引用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-08-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-29
        • 1970-01-01
        相关资源
        最近更新 更多