Оглавление:
Для отслеживания процесса загрузки нажмите на меню справа (в десктопной версии)
Установка:
- Подключаем библиотеку 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 $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; ?>Я так понял основная загрузка приходится на?
Если так, то можно подключить их по аналогии с картой
Т.е. после скрола, создаем канвас и присваиваем ему нужный айди и класс.
Или после скрола подключить скрипт, который отрисовывает их.
Лучше бы конечно поглядеть живой пример, а не код.
в принципи да. Думаю переделать в основе всЁ. Сделать php генерацию страниц в определенную папку с 3d моделями, далее сканирование и создание записей в index и загрузка во всплывающем окне с применением pace.js
Вот сам сайт... если что
Вам лучше не лази делать, а подключать 3д модель вместе с модальным окном
Ставим в нем пустой канвас:
По клику на открытие, добавляем скрипт:
$('.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}); });Удаляем эти подключения с шапки, а у боди
Даже можно ID у канваса отсавить, а по клику подключать только анимацию.