В jQuery, когда вы делаете это:
$(function() {
alert("DOM is loaded, but images not necessarily all loaded");
});
Он ожидает загрузки DOM и выполняет ваш код. Если все изображения не загружены, он все равно выполняет код. Это, очевидно, то, что мы хотим, если мы инициализируем какие-либо вещи DOM, такие как показ или скрытие элементов или присоединение событий.
Допустим, что мне нужна анимация, и я не хочу, чтобы она работала, пока не загрузятся все изображения. Есть ли официальный способ сделать это в jQuery?
Лучший способ - использовать <body onload="finished()">
, но я не хочу этого делать, если не буду этого делать.
Примечание: в jQuery 1.3.1 есть ошибка в Internet Explorer, которая действительно ожидает загрузки всех изображений перед выполнением кода внутри $function() { }
. Поэтому, если вы используете эту платформу, вы получите поведение, которое я ищу, а не правильное поведение, описанное выше.
$("img").load()
работает?Ответы:
В jQuery вы используете
$(document).ready()
для выполнения чего-либо, когда загружается DOM, и$(window).on("load", handler)
для выполнения чего-либо, когда загружаются также и все остальные объекты, например изображения.Разницу можно увидеть в следующем полном файле HTML, если у вас есть
jollyroger
файлы JPEG (или другие подходящие):При этом окно предупреждения появляется перед загрузкой изображений, потому что DOM готов к этому моменту. Если вы затем измените:
в:
то окно предупреждения не появляется до тех пор , после того, как будут загружены изображения.
Следовательно, чтобы подождать, пока вся страница не будет готова, вы можете использовать что-то вроде:
источник
Я написал плагин, который может запускать обратные вызовы, когда изображения загружаются в элементы, или запускаться один раз для каждого загруженного изображения.
Это похоже на
$(window).load(function() { .. })
, за исключением того, что позволяет определить любой селектор для проверки. Если вы хотите знать, когда все изображения в#content
(например) загружены, это плагин для вас.Он также поддерживает загрузку изображений , упоминаемых в CSS, такие как
background-image
,list-style-image
и т.д.waitForImages плагин jQuery
Пример использования
Пример на jsFiddle .
Больше документации доступно на странице GitHub.
источник
('img selector').each(function(index) { var offset = $(this).offset(); ...});
однако, offset.top по-прежнему равен нулю. Почему?$(window).load()
будет работать только при первой загрузке страницы. Если вы делаете динамические вещи (например: нажмите кнопку, подождите, пока загрузятся новые изображения), это не сработает. Для этого вы можете использовать мой плагин:демонстрация
Скачать
источник
Yevgeniy Afanasyev
ответе , imagesLoaded справляется с этой задачей гораздо лучше и охватывает сценарий использования, который вы упомянули, наряду со многими другими примерами (см. Решенные проблемы с github) .Для тех, кто хочет получать уведомления о завершении загрузки одного изображения, которое запрашивается после
$(window).load
пожара, вы можете использоватьload
событие элемента изображения .например:
источник
Ни один из ответов до сих пор не дал того, что кажется самым простым решением.
источник
Я бы порекомендовал использовать
imagesLoaded.js
библиотеку JavaScript.Почему бы не использовать JQuery
$(window).load()
?Как указано на /programming/26927575/why-use-imagesloaded-javascript-library-versus-jquerys-window-load/26929951
Другие веские причины использовать загруженные изображения
Ресурсы
источник
С JQuery я иду с этим ...
Демо: http://jsfiddle.net/molokoloco/NWjDb/
источник
Используйте imagesLoaded PACKAGED v3.1.8 (6,8 Кбайт, когда свернуты). Это относительно старый (с 2010 года), но все еще активный проект.
Вы можете найти его на github: https://github.com/desandro/imagesloaded
Их официальный сайт: http://imagesloaded.desandro.com/
Почему это лучше, чем использовать:
Потому что вы можете загружать изображения динамически, например так: jsfiddle
источник
Таким образом, вы можете выполнить действие, когда все изображения внутри тела или любого другого контейнера (в зависимости от вашего выбора) загружены. PURE JQUERY, никаких плагинов не требуется.
источник
Мое решение похоже на молоколоко . Написано как функция jQuery:
пример:
источник