2013-03-12 132 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