我发现了一些以HTML5 canvas
编程方式在JavaScript
. 这些发生在尝试在加载之前修改图像时,我已经能够使用该技术修复其中的大部分:
var myImage = document.createElement('img');
myImage.onload = function(){
console.log("image src set!");
};
myImage.src="img/foobar.png";
我正在为几张图像中的一张执行此操作,并且发生了一件奇怪的事情。基本上,图像在加载之前绘制到画布上。我什至试图通过使用布尔值来指定图像是否已经绘制来解决这个问题。这是我的输出代码。为了理解上下文,此代码是每秒调用一次以更新画布的函数的一部分。
if (!at_arrow_black)//one of two images used to show an arrow on the canvas
{
at_arrow_black = document.createElement('img');
at_arrow_black.onload = function() {
if (foregroundColor === "black")//which image to draw depends on the foreground color
{
console.log("black load");
context.drawImage(at_arrow_black, canvas.width*.775, canvas.height*.66, canvas.width*.075, font*4/5);
}
};
at_arrow_black.src = "img/at_arrow.png";
}
else
{
if (foregroundColor === "black")
{
if (hasDrawnArrow)//this starts as false
{
console.log("1. black draw");
context.drawImage(at_arrow_black, canvas.width*.775, canvas.height*.66, canvas.width*.075, font*4/5);
}
else
{
logDebug("2. black draw");
hasDrawnArrow = true;
}
}
}
这将导致画布在此循环的第一次迭代中(并且在稍微不同的地方)首先绘制一个箭头,然后绘制另一个箭头。我得到的输出:
2. black draw
black load
1. black draw
这是预期的输出 - 但为什么画布无论如何都要绘制图像?这是某种竞争条件吗?我能做些什么来修复它?