为什么javascript setTimeout延迟不起作用且setInterval太慢

时间:2013-08-03 17:54:19

标签: javascript html5 canvas settimeout setinterval

    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

我做错了什么?

2 个答案:

答案 0 :(得分:2)

除了Pointy的答案之外。由于js的单线程体系结构,你在setInterval中永远不会获得0ms步长,在某些浏览器中,它将接近0毫秒,但它永远不会像浏览浏览器直到它完成的循环一样。

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

答案 1 :(得分:1)

您未正确地致电setTimeout

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

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