我在这里找到了一个很好的代码来将图像预加载到应用程序中。这很好。Javascript语句,函数不叫
// PRELOAD IMAGES
var images = {};
function loadImages(sources, callback) {
var loadedImages = 0;
var numImages = 0;
// get num of sources
for(var src in sources) {
numImages++;
}
for(var src in sources) {
images[src] = new Image();
images[src].onload = function() {
if(++loadedImages >= numImages) {
callback(images);
}
};
images[src].src = sources[src];
}
}
var sources;
sources = {
img1: "....../img1.png",
img2: "....../img2.png",
};
当调用loadImages()时,它工作得很好。
loadImages(sources, function(images) {
ctxLogo.drawImage(images.img1, 0, 0, 10, 10);
});
但是,当我试图从if语句调用loadImages()在for循环中,不管是什么原因函数没有被调用。 我拉数组中的图像名称。 其他一切工作的intented即迭代,条件等代码如下:
loadImages(sources, function (images) {
for (var j = 0; j < data.length; j++) {
if (data[j].FlImg === 'img2') {
alert (j) // just to be sure it gets here, it does.
alert(j +'-this line is not')
ctxGameBoard.drawImage(images.img2, 0, 0, 100, 100);
}
});
我跑在本地。 任何建议非常感谢。
已解决。我的问题是,对象变量没有在if块中声明。一旦我将代码更改为在loadImages函数中运行循环和条件。一切按预期工作。感谢您指出。
是loadImages函数之外的第二个代码块吗?你的图像参数如何设置?它看起来像你传递null,因此你的loadImages函数会出错,因为图像是空的或未定义的。 – mwilson
什么“if语句内循环”?请显示您的完整代码。 – Bergi
是的,确保顶层函数中的回调被调用。 –