Установите счетчик количества изображений с помощью свойства length
[документы] , которое уменьшается при загрузке изображений.
var imgs = $("#images_wrapper > img").not(function() { return this.complete; });
var count = imgs.length;
if (count) {
imgs.load(function() {
count--;
if (!count) {
$("#images_wrapper").show();
alert('all done');
}
});
} else {
$("#images_wrapper").show();
}
Метод not()
[документы] удаляет из сопоставленного набора изображения, для которых их свойство .complete
true
.Это означает, что изображение уже загружено и, возможно, было кэшировано браузером.
Конечно, load()
[docs] методсрабатывает при завершении загрузки каждого изображения.
Пример: http://jsfiddle.net/uhmAR/1/
РЕДАКТИРОВАТЬ: Изменено, так что контейнер будет отображаться, если все кешируются изображения.
РЕДАКТИРОВАТЬ:
Еще один вариант описанного выше - привязать .load()
квсе изображения и используйте метод filter()
[docs] , чтобы получить те из них, которые .complete
, и просто вручную вызовите .load()
на них.
Это устраняет необходимость в операторе if/else
.
var imgs = $("#images_wrapper > img")
var count = imgs.length;
imgs.load(function() {
count--;
if (!count) {
$("#images_wrapper").show();
alert('all done');
}
}).filter(function() { return this.complete; }).load();
Пример: http://jsfiddle.net/uhmAR/3/