После попытки выполнить эту задачу практически всеми возможными способами именно этот наконец-то сработал, и большое спасибо Naugtur за то, что он указал мне правильное направление:
var no_of_images = $('img').size();
$.extend(no_of_images);
if(no_of_images > 0) {
var images = new Array();
var i = 0;
$('img').each( function() {
images[i] = $(this).attr('src');
i++;
});
i = 0;
$(images).each( function(){
var imageObj = new Image();
imageObj.src = images[i];
$(imageObj).load( function() {
no_of_images--;
i++;
if(no_of_images == 0){
functionToPerform();
}
});
});
} else {
functionToPerform();
}
Для быстрого объяснения происходящего я воспользуюсь аналогией. Представьте, что каждое изображение - гость на вашей вечеринке. Свет погас. Вы включаете свет, затем мчитесь к каждому гостю и даете им лист бумаги, ручку и сотовый телефон, подсчитывая, сколько людей вы раздавали материалы. Все они начинают яростно рисовать, а затем, как только они заканчивают свои рисунки, они звонят вам и говорят вам. Для каждого звонящего вы вычеркиваете счет со своей доски. Когда последний человек звонит вам (когда у вас кончаются отметки на доске), вы говорите ему, чтобы он повесил трубку и позвонил пиццерию. Это время пиццы. Если гостей не было с самого начала, позвоните пиццерию самостоятельно.
Если вы думаете: «Почему он создал Image()
объект для каждого $.load()
, то я попытался пойти по традиционному маршруту jQuery с использованием прямого селектора в стиле jQuery вместо объекта Object. Казалось бы, полностью игнорируется (что приводит к сбою страницы). Я пытался использовать Image()
в сочетании с .onLoad
, и это работало, поскольку не срывало страницу, но не выполняло функцию, для которой я ее написал.
Этот фрагмент кода является автономным, поэтому я думаю, что его можно скопировать в любое приложение для загрузки изображений. Это кажется мне достаточно маленьким, чтобы не быть навязчивым. functionToPerform()
в основном действует как любая функция, которую вы хотели бы подождать, пока не загрузятся все изображения (в моем случае это был весь плагин). Toodles.