无法使用 for 循环在画布中创建图像
Cannot create images in a canvas with for loop
我有以下代码,它应该执行以下操作:
- 在 html 页面上动态创建 2 个 Canvas 元素(这工作正常)
- 对于每个 Canvas 元素,检查 allSteps 变量,该变量表示哪些图像应出现在画布元素的哪个位置。在此硬编码示例中,它应在第一个画布的底部显示两个黑框,在第二个画布的底部显示两个棕色框。(这无法正常工作)。所有图像均为 50x50。
出于某种原因,它只在第二个画布的末尾加载一个图像。
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="js/jquery-1.7.2.min.js"></script>
<script type="text/javascript" language="javascript">
$(document).ready(function() {
var boxImages = ['img/white.jpg', 'img/blue.jpg', 'img/black.jpg', 'img/brown.jpg', 'img/green.jpg', 'img/red.jpg'];
var IMAGE_WIDTH=50;
var MAX_COLS = 7;
var MAX_ROWS = 8;
var numberOfSteps = 2;
var allSteps = [];
allSteps[0] = '0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2';
allSteps[1] = '0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3';
$('#result_div').html('<p>All Steps : ' + allSteps + '</p>');
for (count=0; count < numberOfSteps; count++)
{
$('#result_div').append('<h3>Step : ' + count + '</h3>');
$('#result_div').append('<p><canvas id="resultCanvas' + count + '" width="350" height="400" style="border:1px solid #c3c3c3;" ></p>');
resultCanvas=document.getElementById('resultCanvas'+count);
resultCtx = resultCanvas.getContext("2d");
currentSolution = allSteps[count].split(" ");
for (r=0; r < MAX_ROWS; r++)
{
for (c=0; c < MAX_COLS; c++)
{
imgNumber=currentSolution[((r)*MAX_COLS)+c];
if (imgNumber != 0)
{
boxX = (c*IMAGE_WIDTH);
boxY = (r*IMAGE_WIDTH);
cimg=new Image();
cimg.onload = function(){resultCtx.drawImage(cimg,boxX,boxY);};
cimg.src=boxImages[imgNumber];
}
}
}
}
});
</script>
<body>
<div id="result_div"></div>
</script>
</body>
</html>
我还没有测试过这个,但我想你覆盖你的cimg.src
并且cimg.onload
比实际加载的图像快。您是否尝试过使用图像数组?
var cimgs = [];
var IMAGE_WIDTH=50;
/*
...
*/
if (imgNumber != 0)
{
boxX = (c*IMAGE_WIDTH);
boxY = (r*IMAGE_WIDTH);
cimgs.push(new Image());
cimgs[cimgs.length - 1].onload = (function(img,x,y){
return function(){resultCtx.drawImage(img,x,y);};
})(cimgs[cimgs.lenght - 1],boxX,boxY);
cimgs[cimgs.length - 1].src = boxImages[imgNumber];
}
}
相关文章:
- Kendo:我该如何在树视图中创建一个递归的hieiarchy
- 如何在Parse中创建一对多关系
- 我想在AngularJS应用程序中创建一个输入数字框,用户不应该在该框上键入十进制数字.(一个整数输入框)
- 如何使用JQuery在HTML中创建包含字符串参数的引号的onclickjavascript链接
- 在三个.js中创建球体(例如地球)的磁力线
- 在javascript中的xml中创建一个链接
- 如何在javascript中创建自定义事件
- 在经过DATE验证的列中创建null值
- 如何在javascript中创建动态json对象
- 文本表示法VS.构造函数,用于在JavaScript中创建对象
- 在angularjs中创建自定义控件的推荐方法
- 字符串中的
标记未正确在 HTML 中创建新行 - 在量角器中创建一个.txt错误输出文件是手动的,而不是控制台错误
- 如何在Google chrome安全首选项文件中创建扩展安全哈希代码
- 在javascript中创建数组,而不是if.else
- 如何在 JavaScript 中创建输入文本框
- 如何在php中创建一个函数,该函数与文本区域一起工作,通过输入类似[color:red]的内容来打印具有等效颜色的文本
- 如何在JavaScript中创建打字机效果,这将考虑html标记规则
- 在节点中创建文件全局变量
- 如何在剑道UI中创建类转换效果