Featherlight — это легковесная библиотека для создания модальных окон (lightbox) на основе jQuery. Она позволяет быстро и удобно отображать изображения, HTML-контент или AJAX-запросы без лишнего кода. Одной из важных возможностей при работе с изображениями является ленивая загрузка (lazy loading), которая повышает производительность страницы, ускоряет её рендеринг и снижает нагрузку на сервер.
Для работы с Featherlight необходимо подключить jQuery и файлы самой библиотеки:
<link href="https://cdn.jsdelivr.net/npm/featherlight@1.7.14/release/featherlight.min.css" rel="stylesheet">
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/featherlight@1.7.14/release/featherlight.min.js"></script>
Важно, чтобы jQuery был подключён до Featherlight, иначе библиотека работать не будет. CSS отвечает за стили модальных окон, а JS — за их функциональность.
Ленивая загрузка предполагает, что изображения загружаются только при необходимости, например при открытии модального окна. В контексте Featherlight это реализуется через:
data-featherlight или href,
указывающие на путь к изображению.Такой подход уменьшает начальный размер страницы и ускоряет отображение контента.
<a href="large-image.jpg" data-featherlight="image">
<img src="thumbnail.jpg" alt="Превью изображения">
</a>
В этом примере:
thumbnail.jpg загружается сразу и
отображается на странице.large-image.jpg подгружается только
при клике на ссылку и открытии модального окна.Таким образом, тяжелое изображение не блокирует рендеринг страницы.
Featherlight предоставляет несколько параметров для тонкой настройки:
$('a[data-featherlight="image"]').featherlight({
loading: 'Загрузка изображения...',
openSpeed: 300,
closeSpeed: 200,
closeOnClick: 'anywhere'
});
loading — текст, отображаемый до
полной загрузки изображения.openSpeed и closeSpeed —
скорость анимации открытия и закрытия модального окна в
миллисекундах.closeOnClick — определяет поведение
при клике за пределами окна. Значения: 'background',
'anywhere' или false.Для галерей с множеством изображений важно, чтобы большие изображения загружались только при клике на конкретное превью:
<div class="gallery">
<a href="image1-large.jpg" data-featherlight="image">
<img src="image1-thumb.jpg" alt="Изображение 1">
</a>
<a href="image2-large.jpg" data-featherlight="image">
<img src="image2-thumb.jpg" alt="Изображение 2">
</a>
<a href="image3-large.jpg" data-featherlight="image">
<img src="image3-thumb.jpg" alt="Изображение 3">
</a>
</div>
Каждое изображение загружается отдельно при открытии, что снижает нагрузку при первоначальной загрузке страницы.
Featherlight поддерживает ленивую загрузку не только изображений, но и HTML-контента через AJAX. Это полезно для динамических страниц с большим количеством контента:
$('a[data-featherlight-ajax]').featherlight({
ajax: function() {
return $(this).attr('data-featherlight-ajax');
},
loading: 'Загрузка контента...'
});
<a href="#" data-featherlight-ajax="content.html">Открыть контент</a>
При клике контент из content.html загружается только
один раз, после чего отображается в модальном окне. Повторная загрузка
не производится, что экономит ресурсы.
Для крупных страниц с десятками изображений следует учитывать несколько практик:
loading="lazy" для
<img> на странице — браузер сам откладывает
загрузку превью.$('.gallery a').featherlightGallery({
previous: '←',
next: '→',
fadeIn: 200,
fadeOut: 200
});
Featherlight предоставляет события для контроля ленивой загрузки:
beforeOpen — вызывается перед
открытием окна. Можно использовать для динамической подстановки
контента.afterOpen — после того как окно
полностью открылось и изображение загрузилось.beforeClose / afterClose
— позволяют освободить ресурсы или запускать анимации при закрытии.Пример:
$('a[data-featherlight="image"]').on('afterOpen', function(event){
console.log('Изображение полностью загружено и отображено.');
});
Featherlight автоматически масштабирует изображения под размер окна браузера. Для больших изображений это особенно важно:
$.featherlight.defaults.closeOnEsc = true;
$.featherlight.defaults.persist = false;
closeOnEsc — закрытие при нажатии
клавиши Escape.persist — указывает, сохранять ли
ранее открытое содержимое в DOM после закрытия (для ленивой загрузки
часто ставится false).Featherlight легко интегрируется с React, Vue и другими библиотеками через обычное подключение jQuery. Ленивую загрузку изображений можно комбинировать с виртуальным рендерингом, чтобы на странице отображались только видимые превью, а полноразмерные изображения подгружались по мере открытия модальных окон.
Этот подход позволяет создавать быстрые, отзывчивые и экономные по ресурсам страницы с изображениями, поддерживая как одиночные картинки, так и сложные галереи, без избыточной загрузки контента на клиентскую сторону.