Ответ 1
Настройте счетчик количества изображений с помощью length
[docs], которое уменьшается при загрузке изображений.
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()
[docs] удаляет из сопоставленного задайте изображения, где их свойство .complete
true
. Это означает, что изображение уже загружено и, возможно, кэшировано браузером.
Конечно, метод load()
[docs] срабатывает, поскольку каждое изображение завершает загрузку.
Пример: http://jsfiddle.net/uhmAR/1/
РЕДАКТИРОВАТЬ: Изменено так, чтобы контейнер показывал, все ли изображения были кэшированы.
EDIT:
Другой вариант выше - привязать .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/