2015-04-30 44 views
0

我在這裏找到了一個很好的代碼來將圖像預加載到應用程序中。這很好。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函數中運行循環和條件。一切按預期工作。感謝您指出。

+0

是loadImages函數之外的第二個代碼塊嗎?你的圖像參數如何設置?它看起來像你傳遞null,因此你的loadImages函數會出錯,因爲圖像是空的或未定義的。 – mwilson

+0

什麼「if語句內循環」?請顯示您的完整代碼。 – Bergi

+0

是的,確保頂層函數中的回調被調用。 –

回答

0

您在訪問images喜歡的對象,在你的第二個for/in循環:

images[src] = new Image(); 

可是你有沒有聲明變量呢。您可能會在DevTools中找到ReferenceError

+0

圖像被宣佈。我沒有複製那部分。更新的代碼正在顯示。 – goryef

0

首先,你可以使用此代碼來獲取的來源,而不是數:

var numImages = sources.length; 

其次,你的對象變量「圖像」是不確定的;

第三,你的numImages已經比getImageImages的getter,所以if語句只會在最後一次被調用。

+0

我定義了'圖像'。部分代碼未被複制。它被糾正了。仍然不起作用 – goryef

0

已解決。我的問題是,對象變量沒有在if塊中聲明。一旦我將代碼更改爲在loadImages函數中運行循環和條件。一切按預期工作。感謝您指出。