因此,我基本上將多個圖像加載到多個畫布上(每個畫布/ ctx一個圖像 - 其幻燈片)。我希望確保每個圖像在嘗試將圖像繪製到畫布上之前都已加載。如果我用for循環加載多個圖像,我只需要一個img.onload函數嗎?
下面是代碼...
- 在實施例1我使用3個的onload事件(一個用於每個圖像)
- 在實施例2我使用一個onload事件,但它是被調用的for循環
問題的最後一個影像:我可以使用例2,並自信地認爲,如果最後的圖像加載,然後圖像之前必須被載入?
另外----我已經試過了,但是可以在for循環中完成嗎?我無法讓它工作。 參見實施例3
實施例1個 3的onload事件
var img=[0,'slide1','slide2','slide3'];
for (var i=1;i<=3;i++) {
img[i] = new Image();
img[i].src = '/images/slide' + i + '.png'
}
img[1].onload = function() { // checks to make sure img1 is loaded
ctx[1].drawImage(img[1], 0, 0);
};
img[2].onload = function() { // checks to make sure img2 is loaded
ctx[2].drawImage(img[2], 0, 0);
};
img[3].onload = function() { // checks to make sure img3 is loaded
ctx[3].drawImage(img[3], 0, 0);
};
實施例2只有最後onload事件
var img=[0,'slide1','slide2','slide3'];
for (var i=1;i<=3;i++) {
img[i] = new Image();
img[i].src = '/images/slide' + i + '.png'
}
img[3].onload = function() { // checks to make sure the last image is loaded
ctx[1].drawImage(img[1], 0, 0);
ctx[2].drawImage(img[2], 0, 0);
ctx[3].drawImage(img[3], 0, 0);
};
實施例3一個在onload for循環做所有onload事件
var img=[0,'slide1','slide2','slide3'];
for (var i=1;i<=3;i++) {
img[i] = new Image();
img[i].src = '/images/slide' + i + '.png'
img[i].onload = function() { // checks to make sure all images are loaded
ctx[i].drawImage(img[i], 0, 0);
};
}
我認爲我不能做例3,因爲在第二次運行for循環的時候圖像可能不會被加載,並重寫下一個圖像的onload事件,從而擦除onload事件先前的圖像。正確?
謝謝,我會測試一下! – Jacob
這很好,但你能向我解釋一下嗎。另外,「價值」從哪裏來? – Jacob
「值」表示在img.onload分配結束時傳遞給函數的「i」的值。 「閉包」的主題太複雜了,無法在這篇文章中進行有效解釋,所以我將留下以下鏈接幫助您入門:http://blog.morrisjohns.com/javascript_closures_for_dummies –