javascript Uncatch TypeError 在 HTML5 Canvas 上绘制时
javascript Uncaught TypeError while drawing on HTML5 Canvas
我正在尝试在HTML5画布上绘制一系列图像。例如 - 对于 APPLE 这个词,我正在尝试将 5 张图片 - A.png、B.png、C.png 等串联以显示单词。我的代码如下:
var x = 100;
var word = "APPLE";
var imageArray = new Array();
for (var i = 0; i < word.length; i++) {
imageArray[i] = new Image();
imageArray[i].onload = function() {
context.drawImage(imageArray[i], x, 25, 70, 70); // canvas context
x += 80;
};
imageArray[i].src = "images/"+word.charAt(i)+".png";
}
我收到一个错误 -
javascript 未捕获类型错误:类型错误
有人可以解释一下为什么会发生以及实现这一目标的最佳方法是什么?
代码中有几个可能的错误源:
-
如果你想遍历单词中的每个字母,你应该停在单词的末尾,而不是索引 10:
var word = "APPLE"; // has 5 letters for (var i = 0; i < word.length; i++) { // ... do your code }
-
在回调
onload = function() ...
中,您可以访问不是您想要的imageArray[i]
,因为i
的值会修改,并且在调用它时,您可以访问所需数组后面的第一个元素。此外,您不能依赖按正确的顺序加载每个字母。您可以通过使用以下forEach
来避免这两个错误:var word = "APPLE"; // again, the 5 letter word // transform the word to an array ['A', 'P', 'P', 'L', 'E'] var letters = word.split(''); letters.forEach(function(letter, index) { var image = new Image(); image.onload = function() { context.drawImage(image, x + index * 80, 25, 70, 80); } image.src = "images/" + letter + ".png"; })
循环退出后,imageArray
和i
将保留在您创建的 onload 函数中。 i
上次迭代后再次递增,因此它现在指向数组中未定义的元素。 您可以使用函数创建新作用域:
for (var i = 0; i < word.length; i++) {
imageArray[i] = new Image();
imageArray[i].onload = (function(i){
return function() {
// i in here is now the outer function parameter instead
// of the i in the function that creates the images
context.drawImage(this, x+i*80, 25, 70, 70);
}
})(i);
imageArray[i].src = "images/"+word.charAt(i)+".png";
}
塔拉巴斯的答案通常更好,但是forEach
在IE <9中不起作用
相关文章:
- Javascript和Canvas绘制中间有孔的圆
- canvas没有从uri中绘制完整的图像
- 使用Canvas绘制图像
- HTML5 Canvas - 使用命令数组通过上下文进行绘制
- 尝试绘制从鼠标位置工具栏中选择的形状 - HTML5 CANVAS
- Dart Canvas未绘制图像
- 在Javascript HTML5 Canvas中旋转绘制的圆圈
- javascript Uncatch TypeError 在 HTML5 Canvas 上绘制时
- 如何重新绘制背景,使其看起来像我的“播放器”在html5-canvas中移动
- 在 HTML5 中使用 Canvas Kinetic 绘制许多文本并进行编辑
- HTML Canvas,ImageData.data.set,白色块不绘制
- Javascript HTML5 Canvas 绘制路径问题
- HTML5:在通过 JavaScript 绘制后将透明度应用于 Canvas
- HTML5 Canvas 在列表中,无法在所有内容上绘制图像
- 是否可以在HTML5.canvas中绘制大量简单的几何图形
- 使用 JavaScript 和 Canvas 绘制形状
- 在 HTML5 Canvas 中沿着一条线的方程式绘制
- Javascript和Canvas:绘制和删除线条以创建一个“呼吸”的圆圈
- 无法使用Canvas标记获取HTML/Javascript页面以绘制分数
- 使用Canvas清除并重新绘制折线图上的数据