Featherlight — это лёгкая библиотека для создания модальных окон на JavaScript и jQuery. Она минималистична, гибка и позволяет организовать взаимодействие с пользователем через модальные диалоги, галереи изображений и динамический контент. Одной из ключевых возможностей является автоматическая группировка элементов, что особенно полезно при работе с коллекциями изображений или ссылок.
Для начала необходимо подключить библиотеку и её зависимости:
<link href="featherlight.min.css" rel="stylesheet">
<script src="jquery.min.js"></script>
<script src="featherlight.min.js"></script>
Простейший пример вызова модального окна:
$('.open-modal').featherlight('<p>Содержимое модального окна</p>');
В этом случае при клике на элемент с классом open-modal
откроется всплывающее окно с указанным содержимым.
Featherlight поддерживает группы элементов, которые
позволяют объединять несколько элементов в одну галерею. Это реализуется
с помощью атрибута data-featherlight и группового
идентификатора data-featherlight-group.
Пример разметки для группы изображений:
<a href="image1.jpg" data-featherlight="image" data-featherlight-group="gallery">Изображение 1</a>
<a href="image2.jpg" data-featherlight="image" data-featherlight-group="gallery">Изображение 2</a>
<a href="image3.jpg" data-featherlight="image" data-featherlight-group="gallery">Изображение 3</a>
В этом примере все три ссылки объединены в одну группу
gallery, что позволяет пользователю переключаться
между изображениями с помощью навигации внутри модального окна.
Featherlight позволяет автоматически создавать группы на основе
общего признака элементов. Для этого используется настройка
groupAttr, которая определяет, какой
атрибут будет использоваться для группировки:
$.featherlight.defaults.groupAttr = 'data-gallery';
Пример разметки с автоматической группировкой:
<a href="image1.jpg" data-gallery="portfolio">Проект 1</a>
<a href="image2.jpg" data-gallery="portfolio">Проект 2</a>
<a href="image3.jpg" data-gallery="portfolio">Проект 3</a>
Все элементы с одинаковым значением data-gallery
автоматически объединяются в одну группу, и переключение между ними
осуществляется внутри модального окна.
При группировке элементов появляется встроенная навигация. Featherlight добавляет стрелки “вперед” и “назад”, которые управляют переходом между элементами группы. Навигация работает как по клику, так и с помощью клавиатуры:
$.featherlight.defaults.closeOnEsc = true; // Закрытие по Escape
$.featherlight.defaults.previousIcon = '«'; // Значок назад
$.featherlight.defaults.nextIcon = '»'; // Значок вперед
При работе с галереями важно учитывать цикличность навигации. По умолчанию, достижение конца группы завершает навигацию, но с использованием плагинов или кастомных обработчиков можно реализовать бесконечное перелистывание.
Featherlight поддерживает добавление элементов в существующую группу на лету. Это особенно полезно, когда контент подгружается динамически через AJAX или создаётся через Jav * aScript:
$('#load-more').on('click', function() {
const newItem = $('<a href="image4.jpg" data-gallery="portfolio">Проект 4</a>');
$('body').append(newItem);
newItem.featherlight({group: 'portfolio'});
});
В этом случае новый элемент автоматически включается в группу
portfolio и становится доступен для навигации в модальном
окне.
Featherlight предоставляет события, которые позволяют управлять поведением при открытии, переключении и закрытии окон:
beforeOpen — перед открытием модального окнаafterOpen — после открытияbeforeClose — перед закрытиемafterClose — после закрытияbeforeNavigate — перед сменой элемента группыafterNavigate — после смены элемента группыПример использования колбека для группы:
$('a[data-gallery="portfolio"]').featherlight({
afterNavigate: function(event) {
console.log('Перешли на элемент группы:', this.$currentTarget.attr('href'));
}
});
Это позволяет, например, обновлять счётчик элементов или подгружать дополнительные данные по мере пролистывания галереи.
Featherlight поддерживает кастомизацию элементов управления и шаблонов. Можно полностью изменить внешний вид навигации, кнопок закрытия или индикатора текущего элемента:
$.featherlight.defaults.template =
'<div class="featherlight">' +
'<button class="featherlight-close">×</button>' +
'<div class="featherlight-content"></div>' +
'<button class="featherlight-prev">«</button>' +
'<button class="featherlight-next">»</button>' +
'</div>';
Использование собственного шаблона позволяет интегрировать модальные окна в любой дизайн, сохраняя функциональность группировки и навигации.
При работе с большими группами изображений важно учитывать производительность:
ajax-тип содержимого.$('a[data-gallery="portfolio"]').featherlight({
type: 'ajax',
ajax: { cache: false }
});
Это обеспечивает динамическую подгрузку контента без повторного рендеринга всей страницы.
Автоматическая группировка в Featherlight предоставляет гибкий и масштабируемый инструмент для организации контента, позволяя легко создавать интерактивные галереи, модальные окна и динамические презентации без громоздкого кода. Навигация, динамическое добавление элементов и кастомизация делают библиотеку особенно полезной для проектов любого уровня сложности.