Для отслеживания процесса загрузки нажмите на меню справа
Установка:
- Подключаем библиотеку jQuery 1.7.2 + или Zepto 1.1.6 +
- Подключаем плагин jquery.lazy.js или jquery.lazy.min.js
jquery.lazy доступен для подключения через cdnjs и jsDelivr CDN:
|
1 2 |
<!-- jsDeliver --> <script type="text/javascript" src="//cdn.jsdelivr.net/gh/eisbehr-/jquery.lazy@1.7.10/jquery.lazy.min.js"></script> |
|
1 2 |
<!-- cdnjs --> <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery.lazy/1.7.10/jquery.lazy.min.js"></script> |
Использование:
У картинки вместо атрибута src используем атрибут data-src и добавляем нужный класс:
|
1 |
<img class="lazy" data-src="path/to/image_to_load.jpg" src="" /> |
Инициализируем скрипт после загрузки страницы к нужному классу:
|
1 2 3 |
$(function() { $("img.lazy").Lazy(); }); |
Пример:










Обратите внимание:
Атрибут src у изображения является не обязательным, но если его нет и у картинки нет размеров, то ее высота будет равна нулю. Соответственно, если 100 таких фотографий будут следовать друг за другом, то все они одновременно окажутся в видимой области и начнут загружаться.
Чтобы этого избежать, нужно задать размеры фотографий или использовать миниатюру, как в примере.
|
1 |
<img class="lazy" width="100%" data-src="photo.jpg" src="thumb.jpg" /> |
|
1 2 3 |
.lazy { filter: blur(5px) grayscale(1); } |
|
1 2 3 4 5 6 7 8 9 10 |
$(function() { $("img.lazy").Lazy({ threshold: 0, effect: 'fadeIn', effectTime: 500, afterLoad: function(element) { element.css("filter", "blur(0) grayscale(0)"); } }); }); |
Функции обратного вызова:
Плагин Lazy имеет четыре функции обратного вызова, которые срабатывают в разных точках загрузки элемента.
beforeLoad- вызывается прежде чем картинка будет загруженаafterLoad- вызывается после успешной загрузки изображенияonError- вызывается когда картинка не может быть загруженаonFinishedAll- вызывается когда все фотографии загружены или была возвращена ошибка
Пример:
|
1 2 3 4 5 |
<img class="lazy" data-src="images/1.jpg" /> <img class="lazy" data-src="images/2.jpg" /> ... <img class="lazy" data-src="images/9.jpg" /> <img class="lazy" data-src="images/missing.jpg" /> |
|
1 2 3 4 5 |
img.lazy { width: 700px; height: 467px; display: block; } |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
$(function() { $('.lazy').lazy({ beforeLoad: function(element) { var imageSrc = element.data('src'); console.log('изображение "' + imageSrc + '" начало загружаться'); }, afterLoad: function(element) { var imageSrc = element.data('src'); console.log('изображение "' + imageSrc + '" загрузилось'); }, onError: function(element) { var imageSrc = element.data('src'); console.log('изображение "' + imageSrc + '" не может быть загружено'); } onFinishedAll: function() { console.log('загружены все изображения'); } }); }); |
Настройки:
| Имя | Тип | По умолчанию | Описание |
|---|---|---|---|
| name | string | 'lazy' | Внутреннее имя, используемое для привязок. |
| chainable | boolean | true | По умолчанию Lazy является цепочкой и возвращает все элементы. Если установлено значение false, Lazy вернет созданный экземпляр плагина для дальнейшего использования. |
| autoDestroy | boolean | true | Автоматическое уничтожение экземпляра, когда никакие другие элементы не доступны для обработки.. |
| bind | string | 'load' | Если установлено значение load, Lazy начнет работать сразу после загрузки страницы. Если нужно использовать собственные события - event. |
| threshold | integer | 500 | Количество пикселей под видимым окном, при котором начнется загрузка изображений. |
| visibleOnly | boolean | false | Должны ли загружаться только видимые элементы. |
| appendScroll | integer | window | Элемент для прослушивания событий прокрутки. Может быть полезен, когда изображения хранятся в контейнере. |
| scrollDirection | string | 'both' | Определяет направление прокрутки. Вертикальная vertical, горизонтальная horizontal или обе both. |
| imageBase | string | null | Если этот параметр определен, он будет использоваться в качестве базового пути для всех изображений. |
| defaultImage | string | blank image | Base64 код картинки, который устанавливается в качестве источника изображения src и показывается до того как загрузится основная фотография. |
| placeholder | string | null | Base64 код картинки, который устанавливает фон для каждого элемента в качестве плейсхолдера загрузки. |
| delay | integer | -1 | Если нужно загрузить все элементы сразу после загрузки страницы, можно указать время задержки в миллисекундах. |
| combined | boolean | false | С помощью этого параметра Lazy будет объединять управление событиями и задержанной загрузкой элементов. |
| Эффекты | |||
| effect | string | 'show' | Эффект, который используется для отображения загруженных изображений show или fadeIn. |
| effectTime | integer | 0 | Время эффекта в миллисекундах. |
| Тротлинг | |||
| enableThrottle | boolean | true | Включает тротлинг. |
| throttle | integer | 250 | Время в миллисекундах для ограничения вызовов загрузки. |
Дополнения:
Дополнения для плагина jquery.lazy рассмотрены в теме: "Отложенная загрузка контента".
Плагин jquery.lazy на сайте авторов
Плагин jquery.lazy на github

Тема интересная, применил на свой сайт. Но есть вопрос, как это все прикрутить в карусель?
Через евенты карусели
А подробнее и с примером можете подсказать?
Александр, прошу показать пример, как подключить отложенную загрузку в карусель используя евент карусели. Заранее благодарю!
Когда карусель вращается, происходит событие (евент), какой именно, нужно смотреть документацию карусели.
И когда это событие происходит, то вызываем Lazy.
У меня на masonry фильтре вешается на клик (на карусель тоже можно поставить также - на клик по стрелке)
[code]$("img.carousel-lazy").Lazy({
bind: "event",
delay: 0
});[/code]
Где [b]carousel-lazy[/b] класс у фоток карусели.
В итоге у нас получится, что как только карсуль сдвинется, все ее фотографии будут подгружены.
Здравствуйте, скажите пожалуйста.
Вообще не пойму как правильно делают скрипт ленивой загрузки.
Вот допустим у вас на сайте в фото нет "data-src".
Но гугл не ругается что у вас нет ленивой загрузки фото. Как так?
У меня стоит lazysizes.min.js. Но макет сбивается при ленивой загрузке. Я так понимаю надо заглушку (placeholder). Сколько не читал информации не понятно как это сделать Lazy+placeholder.
По ваше скрипту, сижу, думаю, думаю. Тестил разные способы. Но так и не получилось реализовать.
[b]Если вам не сложно. Дайте хоть пару названий или ссылочек как такое сделать[/b].
У меня стоят [b]data-src[/b], только не везде.
Напишите в телеграм или ВК, попробую обьяснить как это работает все.