2
    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的完整代码

我做错了什么?

4

2 回答 2

2

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

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

于 2013-08-03T18:21:59.307 回答
1

你打电话setTimeout不正确:

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

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

于 2013-08-03T17:57:23.010 回答