Оглавление:
Для отслеживания процесса загрузки нажмите на меню справа (в десктопной версии)
Установка:
- Подключаем библиотеку jQuery 1.7.2 + или Zepto 1.1.6 +
- Подключаем плагин jquery.lazy.js или jquery.lazy.min.js
- Подключаем все его дополнения jquery.lazy.plugins.js или jquery.lazy.plugins.min.js
- Или по отдельности:
- jquery.lazy.ajax.js или jquery.lazy.ajax.min.js (для загрузки AJAX)
- jquery.lazy.av.js или jquery.lazy.av.min.js (для загрузки HTML5 аудио и видео)
- jquery.lazy.iframe.js или jquery.lazy.iframe.min.js (для загрузки фреймов)
- jquery.lazy.picture.js или jquery.lazy.picture.min.js (для загрузки картинок)
- jquery.lazy.script.js или jquery.lazy.script.min.js (для загрузки скриптов)
- jquery.lazy.vimeo.js или jquery.lazy.vimeo.min.js (для загрузки видео Vimeo)
- jquery.lazy.youtube.js или jquery.lazy.youtube.min.js (для загрузки видео YouTube)
- jquery.lazy.noop.js или jquery.lazy.noop.min.js
jquery.lazy и его дополнения доступны для подключения через cdnjs и jsDelivr CDN:
1 2 3 |
<!-- jsDeliver --> <script type="text/javascript" src="//cdn.jsdelivr.net/gh/eisbehr-/jquery.lazy@1.7.10/jquery.lazy.min.js"></script> <script type="text/javascript" src="//cdn.jsdelivr.net/gh/eisbehr-/jquery.lazy@1.7.10/jquery.lazy.plugins.min.js"></script> |
1 2 3 |
<!-- cdnjs --> <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery.lazy/1.7.10/jquery.lazy.min.js"></script> <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery.lazy/1.7.10/jquery.lazy.plugins.min.js"></script> |
Использование:
Инициализируем скрипт после загрузки страницы к нужному элементу:
1 2 3 |
$(function() { $(element).Lazy(); }); |
Функции обратного вызова и настройки плагина можно посмотреть в теме: Отложенная загрузка изображений
Отложенная загрузка AJAX:
Имена: ajax
, get
, post
, put
Параметры: data-src
, data-method
, data-type
По умолчанию для: -
AJAX может получать данные с заданного url и вставлять ответ во внутренний html-код элемента. Это полезно, когда нужно загрузить большее количество контента. По умолчанию в качестве имени загрузчика используется ajax
. Но есть некоторые сокращенные названия для конкретных типов запросов GET
, POST
и PUT
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<!-- Простой GET запрос --> <div data-loader="ajax" data-src="ajax.html"></div> <!-- Простой post запрос с настраиваемым типом ответа --> <div data-loader="ajax" data-src="ajax.html" data-method="post" data-type="html"></div> <!-- GET запрос --> <div data-loader="get" data-src="ajax.html"></div> <!-- POST запрос--> <div data-loader="post" data-src="ajax.html"></div> <!-- PUT запрос--> <div data-loader="put" data-src="ajax.html"></div> |
В запросах POST
и PUT
обратный вызов ajaxCreateData
будет выполняться перед каждым вызовом AJAX. При использовании функция обратного вызова должна возвращать значение параметра data
jQuery AJAX функции.
1 |
<div data-loader="post" data-src="ajax.html" data-value="post-data"></div> |
1 2 3 4 5 |
$('div').Lazy({ ajaxCreateData: function(element) { return {name: element.data('value')}; } }); |
Пример:
Отложенная загрузка аудио / видео:
Имена: av
, audio
, video
Параметры: data-src
, data-poster
По умолчанию для: <audio>
, <video>
Загружает элементы <audio>
и <video>
и прикрепляет источники и дорожки по порядку.
Существует два способа подготовки аудио и/или видео тегов. Первый способ заключается в добавлении всех источников по атрибуту data-src
через запятую по формату файла.
1 2 |
<audio data-src="file.ogg|audio/ogg,file.mp3|audio/mp3,file.wav|audio/wav" controls></audio> <video data-src="file.ogv|video/ogv,file.mp4|video/mp4,file.webm|video/webm" data-poster="poster.jpg" controls></video> |
Другой способ - добавить источники и треки, в качестве дочерних элементов.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<audio controls> <data-src src="file.ogg" type="audio/ogg"></data-src> <data-src src="file.mp3" type="audio/mp3"></data-src> <data-src src="file.wav" type="audio/wav"></data-src> </audio> <video data-poster="poster.jpg" controls> <data-src src="file.ogv" type="video/ogv"></data-src> <data-src src="file.mp4" type="video/mp4"></data-src> <data-src src="file.webm" type="video/webm"></data-src> <data-track kind="captions" src="captions.vtt" srclang="en"></data-track> <data-track kind="descriptions" src="descriptions.vtt" srclang="en"></data-track> <data-track kind="subtitles" src="subtitles.vtt" srclang="de"></data-track> </video> |
Пример:
Отложенная загрузка фреймов:
Имена: frame
, iframe
Параметры: data-src
, data-error-detect
По умолчанию для: <iframe>
Загружает содержимое <iframe>
. Значение по умолчанию возвращает успешную загрузку, даже если url-адрес iframe недоступен (например, 404 или неправильный url-адрес). Если известно, что запрашиваемый путь доступен и нет необходимости в проверке ошибок, можно использовать этот способ.
1 |
<iframe data-src="iframe.html"></iframe> |
Второй способ поддерживает проверку ошибок. Он загрузит содержимое с помощью AJAX и проверит ответ. Используется только на том же домене.
Чтобы включить эту функцию, нужно установить атрибут data-error-detect
значение true
или 1
1 |
<iframe data-loader="iframe" data-src="iframe.html" data-error-detect="true"></iframe> |
Пример:
Отложенная загрузка картинок:
Имена: pic
, picture
Параметры: data-src
, data-srcset
, data-media
, data-sizes
По умолчанию для: <picture>
Загружает элементы <picture>
, а не <img>
, которые описаны в теме "Отложенная загрузка изображений" и прикрепляет источники. Есть два способа, которыми можно подготовить изображение.
Первый способ - создать все дочерние элементы одной строкой:
1 |
<picture data-src="default.jpg" data-srcset="1x.jpg 1x, 2x.jpg 2x, 3x.jpg 3x" data-media="(min-width: 600px)" data-type="image/jpeg" /> |
Второй способ - добавить источники, такие как default, в качестве дочерних элементов.
1 2 3 4 5 6 7 8 |
<picture> <data-src srcset="1x.jpg 1x, 2x.jpg 2x, 3x.jpg 3x" media="(min-width: 600px)" type="image/jpeg"></data-src> <data-img src="default.jpg"></data-img> </picture> <picture data-src="default.jpg"> <data-src srcset="1x.jpg 1x, 2x.jpg 2x, 3x.jpg 3x" media="(min-width: 600px)" type="image/jpeg"></data-src> </picture> |
Пример:
Отложенная загрузка JavaScript:
Имена: js
, javascript
, script
Параметры: data-src
По умолчанию для: <script>
Загружает файлы JavaScript на элемент <script>
.
1 |
<script data-src="script.js" type="text/javascript"></script> |
Примечание: Обнаружение видимого экрана работает в некоторых браузерах некорректно. Поэтому может оказаться так, что все файлы скриптов начнут загружаются сразу после загрузки страницы.
В Chrome и Firefox у меня загрузка скрипта происходила сразу, но ее можно инициализировать после другого события, через колбек afterLoad
. На примере скрипт загружается после того, как загрузится картинка <picture>
из предыдущего примера.
Пример:
Отложенная загрузка видео с Vimeo:
Имена: vimeo
Параметры: data-src
По умолчанию для: -
Загружает видео Vimeo в <iframe>
. Устанавливается фрейм предложенный Vimeo, добавляется идентификатор видео в атрибут data-src
и имя загрузчика
1 |
<iframe data-loader="vimeo" data-src="151297208" width="640" height="360" frameborder="0" allowfullscreen allowtransparency></iframe> |
Пример:
Отложенная загрузка видео с YouTube :
Имена: yt
, youtube
Параметры: data-src
, data-nocookie
По умолчанию для: -
Загружает видео YouTube в <iframe>
. Устанавливается фрейм предложенный youtube, добавляется идентификатор видео в атрибут data-src
и имя загрузчика
1 |
<iframe data-loader="youtube" data-src="6wJAdfTJZUQ" width="560" height="315" frameborder="0"></iframe> |
Если нужно, можно управлять поведением файлов cookie встроенного видео с помощью атрибута data-nocookie="1"
. Это изменит адрес на youtube-nocookie.com
вместо youtube.com
.
1 |
<iframe data-loader="youtube" data-src="6wJAdfTJZUQ" data-nocookie="1" width="560" height="315" frameborder="0"></iframe> |
Пример:
NOOP загрузчик:
Имена: noop
, noop-success
, noop-error
Параметры: -
По умолчанию для: -
Загрузчик NOOP (или no-operations), как и сказано в названии, ничего не делает. При использовании загрузчика NOOP даже обратные вызовы, такие как beforeLoad
или onError
не будут срабатывать. Это может быть полезно для разработчиков или для простого, безопасного и быстрого отключения других загрузчиков. Его можно использовать со всеми элементами.
1 |
<div data-loader="noop"></div> |
Есть еще два загрузчика NOOP, которые помогают отлаживать код. Загрузчики noop-success
и noop-error
вернут текущее состояние в Lazy и вызовут правильные колбеки.
1 2 3 4 5 |
<!-- запускает обратный вызов 'afterLoad' и 'onFinishedAll' --> <div data-loader="noop-success"></div> <!-- запускает обратный вызов 'onError' и 'onFinishedAll' --> <div data-loader="noop-error"></div> |
Функции обратного вызова и настройки плагина можно посмотреть в теме: Отложенная загрузка изображений
Плагин jquery.lazy на сайте авторов
Плагин jquery.lazy на github
Видео: Oddworld, Hiérophante - Clichés
Аудио: Comfort Fit - "Sorry"
так удивительно ) Статья про отложенную загрузку, а страница грузится 30+ секунд на 500 мб канале ... )))
Просто забавно. Наверно что-то где-то отвалилось.
Справа есть консоль, можете там посмотреть что загрузилось а что нет.
У меня страница полностью загрузилась на 1.1мб за 1.4 сек, а далее, по мере прокрутки вниз, подгружается остальное.
Может РСЯ свою лепту вносит, или хост притормозил.
Привет! А как это влияет на СЕО и оптимизацию, как реагирует гугл на скорость загрузки страницы и так далее?
Оно для этого и нужно, чтобы и гуглы и люди лучше реагировали
Здравствуйте, имеется такой код, в результате цикла генерируются div блоки с canvas, внутри iv3d модель - тяжелая от 10Мб, вызывается это в сплывающем окошке. на сайте есть скрипт процентов загрузки сайта и пока до 100% не загрузится, висит табличка. и из-за тяжести блоков с 3d загрузка долгая, можно ли с помощью данного плагина сделать отложенную загрузку div с 3d?
Я так понял основная загрузка приходится на?
Если так, то можно подключить их по аналогии с картой
Т.е. после скрола, создаем канвас и присваиваем ему нужный айди и класс.
Или после скрола подключить скрипт, который отрисовывает их.
Лучше бы конечно поглядеть живой пример, а не код.
в принципи да. Думаю переделать в основе всЁ. Сделать php генерацию страниц в определенную папку с 3d моделями, далее сканирование и создание записей в index и загрузка во всплывающем окне с применением pace.js
Вот сам сайт... если что
Вам лучше не лази делать, а подключать 3д модель вместе с модальным окном
Ставим в нем пустой канвас:
По клику на открытие, добавляем скрипт:
Удаляем эти подключения с шапки, а у боди
Даже можно ID у канваса отсавить, а по клику подключать только анимацию.