我在這裏找到了一個很好的代碼來將圖像預加載到應用程序中。這很好。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
是的,確保頂層函數中的回調被調用。 –