Я заметил это на многочисленных «современных» веб-сайтах (например, в Facebook и поиске изображений в Google), где изображения под складкой загружаются только тогда, когда пользователь прокручивает страницу вниз достаточно, чтобы поместить их в видимую область области просмотра ( при просмотре источника на странице отображается X количество <img>
тегов , но они не получены с сервера сразу ). Как называется этот метод, как он работает и в скольких браузерах работает. И есть ли плагин jQuery, который может добиться такого поведения с минимальным кодированием.
редактировать
Бонус: может кто-нибудь объяснить, есть ли событие onScrolledIntoView или подобное для элементов HTML. Если нет, то как эти плагины работают?
javascript
jquery
html
scroll
lazy-loading
Салман А
источник
источник
Ответы:
Некоторые из ответов здесь для бесконечной страницы. Салман спрашивает о ленивой загрузке изображений.
Плагин
Демо
РЕДАКТИРОВАТЬ: Как работают эти плагины?
Это упрощенное объяснение:
источник
Дэйв Арц из AOL в прошлом году на конференции jQuery в Бостоне подробно рассказал об оптимизации. AOL использует инструмент под названием Sonar для загрузки по запросу в зависимости от положения прокрутки. Проверьте код, чтобы узнать, как он сравнивает scrollTop (и другие) со смещением элемента, чтобы определить, видна ли часть или весь элемент.
jQuery Sonar
Дэйв рассказывает о Sonar на этих слайдах . Сонар начинается на слайде 46, а общее обсуждение «нагрузки по запросу» начинается на слайде 33.
источник
Я придумал свой собственный базовый метод, который, кажется, работает нормально (пока). Есть, наверное, дюжина вещей, которые затрагивают некоторые популярные скрипты, о которых я не подумал.
Примечание. Это решение быстро и легко реализовать, но, конечно, не очень хорошо для производительности. Обязательно посмотрите на новый Intersection Observer, упомянутый Апурвом и объясненный разработчиками Google , если производительность является проблемой.
JQuery
Пример HTML-кода
Объяснил
При прокрутке страницы проверяется каждое изображение на странице.
$(this).attr('data-src')
- если изображение имеет атрибутdata-src
и как далеко эти изображения находятся от нижней части окна ..
$(this).offset().top < ($(window).scrollTop() + $(window).height() + 100)
настройте + 100 на то, что вам нравится (например, - 100)
var source = $(this).data('src');
- получает значениеdata-src=
URL-адреса изображения$(this).attr('src', source);
- помещает это значение вsrc=
$(this).removeAttr('data-src');
- удаляет атрибут data-src (чтобы ваш браузер не тратил ресурсы на то, чтобы возиться с уже загруженными изображениями)Добавление в существующий код
Чтобы преобразовать ваш html, в редакторе просто найдите и замените
src="
наsrc="" data-src="
источник
Есть довольно приятный плагин бесконечной прокрутки здесь
Я никогда не программировал сам, но могу представить, как это работает.
Событие привязано к прокрутке окна
Вызываемая функция проверяет, превышает ли верх прокрутки размер окна.
Выполняется запрос AJAX, указывающий, с какого результата # начать, сколько получить, и любые другие параметры, необходимые для получения данных.
Ajax возвращает некоторый контент (скорее всего, в формате JSON) и передает его в функцию loadnig.
Надеюсь, это имеет смысл.
источник
Используйте Lozad.js (всего 569 байт без зависимостей), который использует IntersectionObserver для ленивой загрузки изображений.
источник
Швейцарский армейский нож для отложенной загрузки изображений - ImageLoader от YUI .
Потому что проблема не только в наблюдении за положением прокрутки.
источник
Эта ссылка работает для меня демо
1. Загрузите плагин jQuery loadScroll после библиотеки jQuery, но до закрывающего тега body.
2. Добавьте изображения на свою веб-страницу с помощью атрибута Html5 data-src. Вы также можете вставлять заполнители, используя обычный атрибут img src.
3. Вызовите плагин по тегам img и укажите продолжительность эффекта fadeIn, когда ваши изображения будут видны
источник
Я использую jQuery Lazy . У меня ушло около 10 минут на тестирование и час или два, чтобы добавить к большинству ссылок на изображения на одном из моих веб-сайтов ( CollegeCarePackages.com ). У меня НЕТ (нет / ноль) никаких отношений с разработчиком, но это сэкономило мне много времени и в основном помогло улучшить наш показатель отказов для мобильных пользователей, и я это ценю.
источник