2012-03-02 12 views
0

"alert(stepHor);"私のキャンバスには何も描かれません。しかし、私が警告(stepHor)を聞かせたら、すべてが期待どおりに完全に行きます。そのようなもののimg.onloadがあったら、私は理解するだろうが、ここでは私は理解しないだろう。それは "閉鎖"と関係がありますか?前もって感謝します。キャンバスが描画されていないhtml5(javascript、closures)

function draw(imageData) { 
    var canvas=document.getElementById('bg'); 
    if(canvas.getContext){ 
     var ctx=canvas.getContext('2d'); 
     ctx.scale(0.4,0.4); 

     var stepHor=Math.floor(imageData.width/imax); 
     var stepVer=Math.floor(imageData.height/jmax); 
     alert(stepHor); 

     for(i=0;i<=imax;i++){ 
      for(j=0;j<=jmax;j++){ 
       var index=(j*stepVer+Math.floor((imageData.height-jmax*stepVer)/2))*(4*imageData.width)+(i*stepHor*4)+Math.floor((imageData.width-imax*stepHor)/2)*4;//the first 'Math.floor' member is to center the image vertically, the second 'Math.floor' member is to center the image horizontally 
       var red=imageData.data[index]; 
       var green=imageData.data[index+1]; 
       var blue=imageData.data[index+2]; 
       var alpha=imageData.data[index+3]; 
       ctx.fillStyle='rgb(' +red+ ',' +green+ ',' +blue+ ')'; 
       ctx.fillRect(wireWidth*i,wireHeight*j,wireWidth,wireHeight); 
      } 
     } 

    } 
} 
+0

場合は/どのようにこのビーイング関数が呼び出された10msの反応速度を持つロボットでない限りinitにブラウザの十分な時間を与えますか? 'imax'変数はどこから来ますか? – ManseUK

+0

imaxとjmaxはグローバル変数であり、以下のように定義します: 'var imax = Math.floor($(window).width()/ wireWidth); "wire"は実際にグローバル変数で定義するサイズの "ピクセル"です – user1011444

答えて

2

キャンバスに描画する前に、ページの初期化を待つ必要があります。

body.onloadまたはそれ以上のコール機能。

ブロックアラートは:-D

+0

これは私の最初の考えでもありますが、アラートは、domがロードされることを保証する遅延を生成しています。その代わりに、関数はdomがロードされた後にのみ呼び出されるべきです。 – Evert

+0

'canvas'はいつDOMを準備する必要がありますか? http://jsfiddle.net/niklasvh/9xxM8/ – Niklas

+0

申し訳ありませんが、私のHTMLページでは、画像の読み込みが終了すると関数imageReader(this)が呼び出され、この関数の最後に実際の関数draw(imageData) – user1011444

関連する問題