2013-03-12 178 views
1

我正在使用for循環將多個圖像放在畫布上。 我的for循環生成與畫布上的圖像彼此堆疊

  var posx= i*(50); 
     var posy = i*(50); 

     img.src = "./path/img.png"; 
     img.onload = function() { 
     var canvas = document.getElementById("canvas").getContext('2d'); 

      canvas.drawImage(this, posx, posy); 
} 

即使我改變我POSX和銘文的位置,所有的圖像都被在同一位置繪製。 我在控制檯上打印了他們的posx,posy,並且在每次迭代中它們都不相同。 有什麼想法?

感謝

回答

2

它是一個範圍問題

你需要創建一個封閉,以保持所有的呼叫使用相同的(最後posxposy值。

喜歡的東西

img.onload = (function(x,y) { return function() { 
     var canvas = document.getElementById("canvas").getContext('2d'); 
     canvas.drawImage(this, x, y); 
    }; 
    })(posx, posy); 

,它也是明智的使用設置後,你定義它onload以避免緩存圖像問題圖像對象的src

+0

嘿,你能解釋範圍問題的本質是什麼,或者建議一個鏈接,我可以閱讀它?我也問,因爲雖然drawImage工作屬性,我設置如this.style.height =「50px」;沒有工作,我認爲這也是一個範圍問題 – Quantico 2013-03-12 01:43:14

+1

請閱讀http://robertnyman.com/2008/10/09/explaining-javascript-scope-and-closures/ – 2013-03-12 03:55:48