HTML5画布如何在另一张图片上绘制一张图片
HTML5 canvas how to draw one picture on top of another
我想在同一个画布上绘制两个图像。第一个图像是background.jpg,第二个是photo.jpg。我希望photo.jpg总是在另一个之上:
var ctx = document.getElementById("main").getContext("2d");
var background = new Image();
var photo = new Image();
background.onload = function() {
ctx.drawImage(background, 0, 0);
}
photo.onload = function() {
ctx.drawImage(photo, 0, 0);
}
background.src = "background.jpg";
photo.src = "photo.jpg"
我的问题是如何确保照片始终在顶部。因为onload是回调,所以我不能对调用顺序做出任何假设。谢谢
将图像存储在数组中。这将确保无论哪个图像首先完成加载,都能保持订单:
var ctx = document.getElementById("main").getContext("2d");
var background = new Image();
var photo = new Image();
var images = [background, photo]; /// the key
var count = images.length;
background.onload = photo.onload = counter;
background.src = "background.jpg";
photo.src = "photo.jpg"
/// common loader keeping track if loads
function counter() {
count--;
if (count === 0) drawImages();
}
/// is called when all images are loaded
function drawImages() {
for(i = 0; i < images.length; i++)
ctx.drawImage(images[i], 0, 0);
}
(绘制方法假设所有对象都绘制在位置0,0处——当然,更改此值以满足您的标准)。
前台可以在后台的回调中加载
var ctx = document.getElementById("main").getContext("2d");
var background = new Image();
var photo = new Image();
background.onload = function() {
ctx.drawImage(background, 0, 0);
photo.src = "photo.jpg" // after background is loaded, load foreground
}
photo.onload = function() {
ctx.drawImage(photo, 0, 0);
}
background.src = "background.jpg";
相关文章:
- 有人能提供一张ember数据与broswer's的持久层
- jQuery只隐藏<tr>在一张桌子上
- 如何从三张图片中选择一张?其余的必须是看不见的
- 通过onclick事件将一张图片更改为6张图片
- Sequelize hasMany浏览另一张表
- jm按下停止步骤进入滚动的下一张幻灯片
- 我用JavaScript FIleReader读了一张图片,但是我无法得到图片的信息
- 当 Flickity 到达下一张或上一张幻灯片时的事件
- 单击从一张图像切换到两张图像,然后再切换回一张图像
- 单击另一张图像,显示一张图像几秒钟
- 为什么bxSlider会打断我在最后一张幻灯片和第一张幻灯片之间的转换
- 用d3和topojson绘制一张地图
- 引导程序3转盘-随机选择下一张幻灯片
- 每张图片都比前一张少
- HTML5画布如何在另一张图片上绘制一张图片
- 拍摄一张巨大的网页截图(大小超过1350x13500px)
- 如何在最后一张幻灯片上停止动画
- 完整的背景图片幻灯片jquery,想让幻灯片的最后一张图片可以点击
- jqplot只在一张图表上显示荧光笔
- 将场景分成几张画布或重新绘制一张