画布为画布中的不同图形应用不同的图像模式
Canvas apply different image patterns for differents drawings in a canvas?
我有4个图像要在画布中显示。我有4幅画。每幅画的每幅图像。但当我运行循环时,它将最后一个图像应用于所有绘图。
如何将不同的图像模式应用于不同的绘图?
谢谢。
function draw(){
var ctx = $('#canvas')[0].getContext('2d');
var $width = $('#canvas').parent().width();
var $canvas_width = 380;
var $canvas_margin = 20;
var $canvas_height = 810;
var $total_draw = $width / Math.ceil($canvas_width);
var $start = 0;
for(var i = 1; i <= $total_draw + 1; i++){
var image = new Image();
image.onload = function(){
ctx.save();
ctx.beginPath();
ctx.moveTo($start,0);
ctx.lineTo($start + $canvas_width,0);
ctx.lineTo($start, $canvas_height);
ctx.lineTo(-380 + $start, $canvas_height);
ctx.lineTo($start,0);
ctx.fillStyle = ctx.createPattern(image, "no-repeat");
ctx.fill();
ctx.stroke();
ctx.closePath();
ctx.restore();
$start = $start + ($canvas_width + $canvas_margin);
};
image.src = 'img/samples/b'+i+'.jpg';
}
}
由于使用了相同的变量(image),image.src每次都会更改,直到到达最后一次迭代。
循环在加载任何图像之前运行他的4个循环,然后加载最后一个图像,调用image.onload并绘制你的东西。
要解决此问题,请将for循环之外的所有内容都取出来,并使用不同的变量名称。或者你可能会做这样的事情:
var imgArray = new Array();
for (var i=1; i<=4; i++)
{
imgArray[i] = new Image();
imgArray[i].src = 'img/samples/b' + i + '.jpg';
imgArray[i].onload = function(){
ctx.save();
ctx.beginPath();
ctx.moveTo($start,0);
ctx.lineTo($start + $canvas_width,0);
ctx.lineTo($start, $canvas_height);
ctx.lineTo(-380 + $start, $canvas_height);
ctx.lineTo($start,0);
ctx.fillStyle = ctx.createPattern(image, "no-repeat");
ctx.fill();
ctx.stroke();
ctx.closePath();
ctx.restore();
$start = $start + ($canvas_width + $canvas_margin);
};
}
因此onload函数适用于不同的对象。
更新
希望你对这个代码感到满意:)对不起,我没有找到更好的序列号图像。
http://jsfiddle.net/r5QAF/2/只需将此代码与您的代码合并,您就可能获得您想要的
以下是关于您所面临问题的一些阅读(循环中的javascript闭包)http://www.mennovanslooten.nl/blog/post/62
相关文章:
- Javascript:为页面上的所有图像制作模式弹出窗口
- 将图像文件存储在猫鼬模式中的二进制数据中,并以html形式显示图像
- 模式上的后退和前进按钮位于图像库上(可滚动浏览)
- 缩略图单击时图像未以模式显示
- 使用模式在 HTML5/JS 中绘制图像
- 单击按钮并将其下载为图像格式时,如何使用引导模式弹出窗口显示D3图表
- 尝试单击图像并打开模式ajax
- TinyMCE图像调整大小模式
- 如何在模式窗口中从html表单文件类型打开图像
- Regex将标记图像模式与给定的文件名相匹配
- 如何使用 Javascript 在引导模式中显示图像
- 响应式设计:纵向/横向模式下的图像
- 用于编写用于使用 node.js 上传图像的筛选器列表的设计模式
- 点击按钮打开Ionic图像模式
- 我想在页面刷新时更改背景图像模式.我试过很多代码,但没有按要求工作
- Bootstrap图像模式
- 画布为画布中的不同图形应用不同的图像模式
- 如何使用Snap.svg为路径创建图像模式
- 引导图像模式弹出jquery php
- 如何使SVG图像模式填充移动与对象