[英]image onload not working , error Uncaught TypeError: Type error
我想使用image = new Image();
绘制图像image = new Image();
我用三个不同的图像定义新的变量。
当我运行代码时,出现错误“ Uncaught TypeError:Type error”
如何正确修复代码以绘制包括在可变图像中的所有图像。
非常感谢。
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
canvas.width = 1000;
canvas.height = 500;
var BACKGROUND = {
p1: { url : "http://flora4me.com/im/b/1149.jpg",x: 5, y: 5, w: 1280, h: 480 , dx:0 ,dy:0 ,dw:500 ,dh:500 },
p2: { url : "http://flora4me.com/im/b/1119.jpg",x: 5, y: 495, w: 1280, h: 480 , dx:100 ,dy:100 ,dw:500 ,dh:500},
p3: { url : "http://vladfilippov.com/blog/2012-12-07/intro.jpg",x: 5, y: 985, w: 1280, h: 480 , dx:200 ,dy:200 ,dw:500 ,dh:500 }
};
var image;
for (var n in BACKGROUND)
{
image = new Image();
image.src = BACKGROUND[n].url;
image.onload = function() {
ctx.drawImage(image, BACKGROUND[n].x,BACKGROUND[n].y, BACKGROUND[n].w, BACKGROUND[n].h, BACKGROUND[n].dx, BACKGROUND[n].dy, BACKGROUND[n].dw, BACKGROUND[n].dh );
};
}
现在你绘制p3
三次,而不是遍历BACKGROUND
。 虽然这不会解释“类型错误”。 可能您正在使用一个库,该库向Object原型添加了属性。 要解决这些问题,请将BACKGROUND
切换到数组并创建如下循环:
for (var n = 0; n < BACKGROUND.length; n++) {
image = new Image();
(function (x) {image.onload = function() {
ctx.drawImage(image, BACKGROUND[x].x,BACKGROUND[x].y, BACKGROUND[x].w, BACKGROUND[x].h, BACKGROUND[x].dx, BACKGROUND[x].dy, BACKGROUND[x].dw, BACKGROUND[x].dh);
}
}(n));
image.src = BACKGROUND[n].url;
}
您还可以保留BACKGROUND
对象,但是在这种情况下,您需要检查for..in
第一行所期望的属性:
if (!BACKGROUND.hasOwnProperty(n)) continue;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.