Featherlight — это легковесная библиотека для создания модальных окон и галерей на JavaScript и jQuery. Для работы достаточно подключить CSS и JS-файлы библиотеки. Минимальный набор подключения выглядит следующим образом:
<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>
Featherlight позволяет использовать как стандартные модальные окна с контентом, так и специализированные галереи для изображений.
Featherlight поддерживает работу с изображениями и группами
элементов. Для создания галереи достаточно задать атрибут
data-featherlight и указать
data-featherlight-gallery.
Пример структуры HTML:
<a href="img1.jpg" data-featherlight="image" data-featherlight-gallery="gallery">Изображение 1</a>
<a href="img2.jpg" data-featherlight="image" data-featherlight-gallery="gallery">Изображение 2</a>
<a href="img3.jpg" data-featherlight="image" data-featherlight-gallery="gallery">Изображение 3</a>
Каждый элемент с одинаковым значением
data-featherlight-gallery автоматически объединяется в одну
галерею, позволяя переключаться между изображениями внутри модального
окна.
Featherlight предоставляет методы для управления модальными окнами программно. Создание экземпляра галереи через Jav * aScript:
var fl = $.featherlight('<img src="img1.jpg">');
После открытия модального окна можно закрыть его через метод
close():
fl.close();
Для галерей важно работать с индексами элементов, чтобы открывать конкретное изображение:
var gallery = $.featherlightGallery(['img1.jpg', 'img2.jpg', 'img3.jpg'], {
startIndex: 1 // открывает второе изображение
});
FeatherlightGallery поддерживает множество опций:
startIndex — индекс изображения,
которое откроется первым.previousIcon / nextIcon —
кастомные иконки навигации.openSpeed / closeSpeed —
скорость анимации открытия и закрытия.afterContent — функция обратного
вызова после вставки контента, полезна для динамического контента.Пример с настройкой:
$.featherlightGallery(['img1.jpg', 'img2.jpg', 'img3.jpg'], {
startIndex: 0,
nextIcon: '→',
previousIcon: '←',
openSpeed: 300,
closeSpeed: 300,
afterContent: function() {
console.log('Контент загружен:', this.$currentTarget);
}
});
Featherlight генерирует собственные события, которые позволяют отслеживать действия пользователя. Основные события:
beforeOpen — перед открытием модального окна.afterOpen — после открытия.beforeClose — перед закрытием.afterClose — после закрытия.Пример подключения событий:
$(document).on('beforeOpen.fb', function(event){
console.log('Модальное окно откроется:', event);
});
$(document).on('afterClose.fb', function(event){
console.log('Модальное окно закрыто:', event);
});
Для галерей можно использовать события beforeNavigate и
afterNavigate, чтобы выполнять действия при смене
изображения.
Featherlight позволяет добавлять изображения динамически после
инициализации. Для этого создается массив ссылок и используется метод
update:
var gallery = $.featherlightGallery([], { startIndex: 0 });
// Добавление нового изображения
gallery.$instances[0].items.push('img4.jpg');
// Перейти к новому изображению
gallery.goto(3);
Такой подход удобен для работы с контентом, загружаемым через AJAX.
CSS Featherlight легко переопределяется для изменения стиля модального окна или галереи:
.featherlight {
background-color: rgba(0,0,0,0.9);
}
.featherlight .featherlight-content img {
max-width: 90%;
max-height: 80vh;
}
.featherlight .featherlight-next,
.featherlight .featherlight-previous {
color: #fff;
font-size: 2em;
}
Можно создавать свои темы, подключая дополнительные классы к контейнеру галереи.
Featherlight поддерживает любые HTML-элементы и AJAX-контент. Для загрузки изображений с сервера:
$.featherlight({
ajax: 'image-list.html',
afterContent: function() {
console.log('Динамический контент загружен');
}
});
Такой подход обеспечивает гибкую работу с галереями, когда изображения не известны на момент загрузки страницы.
FeatherlightGallery имеет встроенные методы next(),
previous(), goto(index) для программного
управления навигацией:
var gallery = $.featherlightGallery(['img1.jpg', 'img2.jpg', 'img3.jpg']);
gallery.next(); // следующее изображение
gallery.previous(); // предыдущее изображение
gallery.goto(2); // третье изображение
Методы позволяют полностью контролировать поведение галереи без вмешательства пользователя.
Featherlight минимален по размеру, но при больших галереях рекомендуется:
Эти меры снижают нагрузку на DOM и повышают отзывчивость интерфейса.