Можно ли определить, когда все изображения загружаются через событие jQuery?
В идеале должен быть
$(document).idle(function()
{
}
или
$(document).contentLoaded(function()
{
}
Но я не могу найти такого.
Думал прикрепить такое событие:
$(document).ready(function()
{
var imageTotal = $('img').length;
var imageCount = 0;
$('img').load(function(){if(++imageCount == imageTotal) doStuff();});
}
Но сломается ли это, если изображение не загрузится? Критически важно, чтобы метод был вызван в нужное время.
Ответы:
В документации jQuery есть ряд предостережений по использованию события загрузки с изображениями. Как отмечено в другом ответе, плагин ahpi.imgload.js не работает, но связанная с ним суть Paul Irish больше не поддерживается.
По словам Пола Айриша, канонический плагин для обнаружения событий завершения загрузки изображений теперь находится по адресу:
https://github.com/desandro/imagesloaded
источник
Если вы хотите проверить не все изображения, а конкретное (например, изображение, которое вы заменили динамически после того, как DOM уже завершена), вы можете использовать это:
источник
load()
что не сработает, когда изображение уже загружено. Это легко может произойти, когда изображение находится в кеше браузера пользователя. Вы можете проверить, загружено ли изображение уже с помощью$('#myImage').prop('complete')
, который возвращает true, когда изображение загружено.Вы можете использовать мой плагин waitForImages, чтобы справиться с этим ...
Преимущество этого заключается в том, что вы можете локализовать его для одного элемента-предка, и он может опционально обнаруживать изображения, на которые есть ссылки в CSS.
Это лишь верхушка айсберга, дополнительную функциональность можно найти в документации .
источник
Использование jQuery $ (). Load () в качестве обработчика событий IMG не гарантируется. Если изображение загружается из кеша, некоторые браузеры могут не запускать событие. В случае (более старых?) Версий Safari, если вы изменили свойство SRC элемента IMG на то же значение , событие onload НЕ сработает.
Похоже, что это признается в последней версии jQuery (1.4.x) - http://api.jquery.com/load-event - чтобы процитировать:
Теперь есть подключаемый модуль для распознавания этого случая и свойства IE "complete" для состояний загрузки элементов IMG: http://github.com/peol/jquery.imgloaded/raw/master/ahpi.imgload.js
источник
В соответствии с этим ответом вы можете использовать событие загрузки jQuery для
window
объекта вместоdocument
:Это сработает после того, как весь контент на странице будет загружен. Это отличается от того,
jQuery(document).load(...)
который запускается после завершения загрузки DOM.источник
Плагин imagesLoaded - отличный вариант , если вам нужно кроссбраузерное решение.
Если вам просто нужен рабочий процесс IE, это подойдет
источник
На данный момент есть примечание к плагину ahpi.imgload.js, в котором говорится, что он в настоящее время не работает, и вместо этого попробуйте эту суть: https://gist.github.com/797120/7176db676f1e0e20d7c23933f9fc655c2f120c58
источник
Для изображений с одинаковым происхождением вы можете использовать:
источник
возможно, этот плагин может быть полезен: http://www.farinspace.com/jquery-image-preload-plugin/
источник
источник
источник
Я создал свой собственный сценарий, потому что обнаружил, что многие плагины сильно раздуты, и я просто хотел, чтобы они работали так, как я хотел. Mine проверяет, имеет ли каждое изображение высоту (собственную высоту изображения). Я объединил это с функцией $ (window) .load (), чтобы обойти проблемы кеширования.
В моем коде это довольно много комментариев, поэтому на него будет интересно посмотреть, даже если вы не используете его. У меня он отлично работает.
Без лишних слов, вот он:
imgLoad.js скрипт
источник
Ожидание загрузки всех изображений ...
Я нашел ответ на мою проблему с jfriend00 здесь jquery: как прослушать событие загрузки изображения одного контейнера div? .. и "if (this.complete)"
Ожидание загрузки всего, а некоторые, возможно, в кеше! .. и я добавил событие "error" ... оно надежно во всех браузерах
Демо: http://jsfiddle.net/molokoloco/NWjDb/
источник
window.load = function(){}
Он полностью поддерживается всеми браузерами и запускает событие, когда все изображения полностью загружены.
https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onload
источник