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
我做错了什么?
答案 0 :(得分:2)
除了Pointy的答案之外。由于js的单线程体系结构,你在setInterval中永远不会获得0ms步长,在某些浏览器中,它将接近0毫秒,但它永远不会像浏览浏览器直到它完成的循环一样。
在我的 chrome中平均为5.3ms ,在我的 IE10中平均为3.4ms 。也许这就是你所说的“ setInterval太慢”。
答案 1 :(得分:1)
您未正确地致电setTimeout
:
setTimeout(dibujo, interval); // no ()
您必须传递对函数的引用,这是通过使用函数的名称来完成的。您不希望()
,因为这会导致在调用setTimeout
之前调用函数,并传入函数的返回值而不是引用功能。