在使用此代碼之前,請注意,對於圖像的onload事件有幾個跨瀏覽器問題。 They are described in the documentation for jQuery's .load
method.
您需要構建一個Deferred對象並根據每個圖像的onload函數對其進行管道操作。
$.when.apply($,$.map(hrefs, function(href) {
var imgLoad = $.Deferred(),
$img = $('<img>').css('height',windowHeight);
ul.append($('<li>').append($img));
$img.load($.proxy(imgLoad.resolve,imgLoad));
$img.attr('src',href);
return imgLoad;
})).done(function(){
// all images are loaded when this executes
})
此代碼使用jQuery.map
將hrefs數組轉換爲Deferred對象數組。在循環和附加圖像時,每個圖像都會有自己的Deferred對象,其.resolve
方法綁定到圖像上的.load
處理程序。當圖像加載時,延遲將被解析。
這個Deferreds數組作爲參數應用於jQuery.when
,它返回一個Promise,該Promise在所有參數解析時解析 - 在這種情況下意味着所有圖像都已加載!然後我們給該Promise附上一個.done
回調。
嗨,這將如何處理我的情況 - 我有一個元素,當它被點擊時觸發這段代碼。它將更多圖像加載到滑塊中... – Dan