javascript - 如何使用 Javascript 在画布上创建和绘制图像数组?
问题描述
我正在尝试使用以下代码来创建图像,允许附加自定义值并在 HTML 画布上绘制。它似乎没有工作。
var canvas = document.getElementById('mainCanvas');
var context = canvas.getContext('2d');
function CreateObject(objectImage){
lastIndex++;
PlanObjects[lastIndex] = new PlanObject(lastIndex,currentSlide,24,24,24,24,objectImage);
context.drawImage(PlanObjects[lastIndex].img,PlanObjects[lastIndex].posX,PlanObjects[lastIndex].posY);
}
var PlanObjects = [];
var lastIndex = -1;
var currentSlide = 0;
function PlanObject(id, slide, width, height, posX, posY, img){
this.id = id;
this.slide = slide;
this.width = width;
this.height = height;
this.posX = posX;
this.posY = posY;
this.img = new Image(img);
}
CreateObject("imgs/icons_star.png");
HTML:
<div id="mainCanvasDiv"><canvas width="800" height="600" id="mainCanvas"></canvas>
我希望创建对象,将其存储在 PlanObjects 数组中(使用它的客户值)并将其绘制到画布上,但它似乎没有这样做。
解决方案
1) 图像构造函数的输入参数是宽度和高度。并且您必须单独设置源:
var myImage = new Image(100, 200);
myImage.src = 'picture.jpg';
document.body.appendChild(myImage);
[ https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/Image ]
2)加载图片是异步的,所以需要处理load
事件:
PlanObjects[lastIndex].img.addEventListener('load', function() {
context.drawImage(PlanObjects[lastIndex].img, PlanObjects[lastIndex].posX, PlanObjects[lastIndex].posY)
});
[ https://developer.mozilla.org/en-US/docs/Web/Events/load ]
推荐阅读
- mongodb - mongodb和elasticsearch之间的实时同步
- mysql - 如何按月份名称按时间顺序而不是按字母顺序排序?
- c++ - 函数返回空指针而不是地址
- bash - Bash getopts 数组为空
- php - 本地主机中的 woocommerce rest api 产品图像
- php - PHP Laravel 如何对每个月的日期进行分组并显示它们
- twitter-bootstrap - 如何在模板中使用相同的代码而不重复
- tkinter - Tkinter filedialog 正在窃取焦点,并且在 Python 3.4.1 中没有“Alt-tab”的情况下不会返回它
- wordpress - 如何将 rel 属性添加到古腾堡画廊中的链接
- r - ggplot2图例:结合离散颜色和连续点大小