Оглавление:
Для отслеживания процесса загрузки нажмите на меню справа (в десктопной версии)
Установка:
- Подключаем библиотеку 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"

У вас нет готового решения для отложенной загрузки (загрузки по клику) для видео VK.com
Не могу найти нормального JS. Сам написать не могу.
ВК Видео вставляется фреймом
А если загружать по клику, то это другая тема.
Т.е. с помощью jquery.lazy.iframe.js можно сделать вставку VK видео?
Должно нормально работать, у вас где то на странице будет фрейм с видео, и когда страница к нему подкрутится, он загрузится.
так удивительно ) Статья про отложенную загрузку, а страница грузится 30+ секунд на 500 мб канале ... )))
Просто забавно. Наверно что-то где-то отвалилось.
Справа есть консоль, можете там посмотреть что загрузилось а что нет.
У меня страница полностью загрузилась на 1.1мб за 1.4 сек, а далее, по мере прокрутки вниз, подгружается остальное.
Может РСЯ свою лепту вносит, или хост притормозил.
Привет! А как это влияет на СЕО и оптимизацию, как реагирует гугл на скорость загрузки страницы и так далее?
Оно для этого и нужно, чтобы и гуглы и люди лучше реагировали
Здравствуйте, имеется такой код, в результате цикла генерируются div блоки с canvas, внутри iv3d модель - тяжелая от 10Мб, вызывается это в сплывающем окошке. на сайте есть скрипт процентов загрузки сайта и пока до 100% не загрузится, висит табличка. и из-за тяжести блоков с 3d загрузка долгая, можно ли с помощью данного плагина сделать отложенную загрузку div с 3d?
[code]<?php
$file3d = ''; // переменная для цикла с HTML
$newArr3d = array();
$file_parts_3d = array();
$ext_3d='';
$title_3d='';
$ar_title_3d = array();
$dir3d = '3d';
$allowed_types_3d=array('iv3d');
$fileico = ''; // переменная для цикла с HTML
$newArrIco = array();
$file_parts_ico = array();
$ext_ico='';
$title_ico='';
$ar_title_ico = array();
$dirico='ico';
$allowed_types_ico=array('jpg');
$i=0;
$ii=0;
$iterico = new FilesystemIterator($dirico, FilesystemIterator::KEY_AS_FILENAME);
$iter3d = new FilesystemIterator($dir3d, FilesystemIterator::KEY_AS_FILENAME);
//----------------------------------------------------------------------------------------
//------------цикл для картинок-------------------------------------------------------
foreach($iterico as $filePathico):
$infileico = $iterico;
$ar_title_ico[] = $filePathico;
endforeach;
//------------ массив картинок в строку --------------------
$n_fileico_ar = implode(' ',$ar_title_ico);
$new_fileico_ar = explode('ico/',$n_fileico_ar);
$newArrIco = array_diff($new_fileico_ar,array(''));
sort($newArrIco);
reset($newArrIco);
//------------цикл для 3d-------------------------------------------------------
foreach($iter3d as $filePath3d):
$infile3d = $iter3d;
$ar_title_3d[] = $filePath3d;
endforeach;
//------------ массив 3d в строку --------------------
$n_file3d_ar = implode(' ',$ar_title_3d);
$new_file3d_ar = explode('3d/',$n_file3d_ar);
$newArr3d = array_diff($new_file3d_ar,array(''));
sort($newArr3d);
reset($newArr3d);
//-------------тестовый вывод------------
/*
echo"$fileico";
echo"<br>";
echo"$file3d";
echo"<br>";
*/
//----------------------------------------------------
while ($ii<count($newArr3d)):
$file3d = $newArr3d[$i];
$fileico = $newArrIco[$i];
$file_parts_ico = explode('.',$fileico);
$ext_ico = strtolower(array_pop($file_parts_ico));
$title_ico = implode('.',$file_parts_ico);
$title_ico = htmlspecialchars($title_ico);
$file_parts_3d = explode('.',$file3d);
$ext_3d = strtolower(array_pop($file_parts_3d));
$title_3d = implode('.',$file_parts_3d);
$title_3d = htmlspecialchars($title_3d);
echo '<div id="div'.$title_3d.'" class="white-popup mfp-hide">
<canvas id="'.$title_3d.'" class="can3d" > </canvas>
</div>
<div class="col-md-4 col-sm-6">
<div class="box-work">
<div class="work-preview">
<a href="#div'.$title_3d.'" title="'.$title_ico.'" class="open-popup-link"><img src="'.$dirico.'/'.$fileico.'" class="imgsmall" alt=""></a>
<div class="hover">
<div class="link-btns">
<a href="#div'.$title_3d.'" title="'.$title_ico.'" class="open-popup-link"><i class="fa fa-search-plus"></i></a>
</div>
</div>
</div>
</div>
</div>
';
$i++;
$ii++;
endwhile;
?>[/code]
Я так понял основная загрузка приходится на?
[code]<canvas id="'.$title_3d.'" class="can3d" > </canvas>[/code]
Если так, то можно подключить их по аналогии с [url="https://atuin.ru/blog/otlozhennaya-zagruzka-yandeks-karty-i-vidzheta-vk/"]картой[/url]
Т.е. после скрола, создаем канвас и присваиваем ему нужный айди и класс.
Или после скрола подключить скрипт, который отрисовывает их.
Лучше бы конечно поглядеть живой пример, а не код.
в принципи да. Думаю переделать в основе всЁ. Сделать php генерацию страниц в определенную папку с 3d моделями, далее сканирование и создание записей в index и загрузка во всплывающем окне с применением pace.js
[url="http://чпу-снк.рф"]Вот сам сайт... если что[/url]
Вам лучше не лази делать, а подключать 3д модель вместе с модальным окном
Ставим в нем пустой канвас:
[code]<div id="diva" class="white-popup mfp-hide">
<canvas class="can3d"></canvas>
</div>[/code]
По клику на открытие, добавляем скрипт:
[code]$('.open-popup-link').click(function() {
var canID = $(this).attr('title'); // Берем атрибут title у ссылки
var modalID = $(this).attr('href'); // Берем атрибут href у ссылки
$(modalID +' canvas').attr('id', canID); // Устанавливаем ID у канваса
// Далее подключаем саму модель, если я правильно понял, то так:
var canvas = document.getElementById(canID);
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
view3d=new iv.window({canvas:canvas,file:"3d/"+ canID +".iv3d",color:0x777777});
});[/code]
Удаляем эти подключения с шапки, а у боди
[code]onload="ivCommonInit3d()"[/code]
Даже можно ID у канваса отсавить, а по клику подключать только анимацию.