2013-08-03 58 views
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爲什麼要使用JavaScript的setTimeout拖延不工作和setInterval太慢

我對setInterval的FIDDLE

我在做什麼錯了完整的代碼完整的代碼?

回答

1

你打電話setTimeout不當:

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

你必須引用傳遞給你的函數,這是通過使用該功能的名稱來完成。你不想要(),因爲這會導致函數被調用之前發生setTimeout的調用發生,您的函數的返回值傳入而不是函數的引用。

+0

太棒了,它按預期工作。謝謝 – gsubiran

2

只是除了波蒂的答案。由於js的單線程架構,你永遠不會在setInterval中獲得0ms的步長,在某些瀏覽器中,它將接近0毫秒,但它永遠不會像瀏覽器向下看直到完成它的循環一樣。

在我鉻是5.3ms,並以我IE10的平均3.4ms的平均值。也許這就是你的意思是「setInterval太慢了」。

相關問題