Featherlight — это легковесная библиотека для создания модальных окон и галерей изображений. Для начала работы необходимо подключить её стили и скрипт:
<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>
<script src="https://cdn.jsdelivr.net/npm/featherlight@1.7.14/release/featherlight.gallery.min.js"></script>
Для галереи необходимо использовать атрибут
data-featherlight="image" и объединить элементы в группу
через data-featherlight-gallery. Пример HTML:
<div class="gallery">
<a href="img/photo1.jpg" data-featherlight="image" data-featherlight-gallery="gallery1">
<img src="img/thumb1.jpg" alt="Фото 1">
</a>
<a href="img/photo2.jpg" data-featherlight="image" data-featherlight-gallery="gallery1">
<img src="img/thumb2.jpg" alt="Фото 2">
</a>
<a href="img/photo3.jpg" data-featherlight="image" data-featherlight-gallery="gallery1">
<img src="img/thumb3.jpg" alt="Фото 3">
</a>
</div>
Каждый элемент галереи связывается через одинаковое значение
data-featherlight-gallery, что позволяет перемещаться между
изображениями внутри одного модального окна.
Featherlight Gallery автоматически определяет элементы с одинаковым
атрибутом data-featherlight-gallery. Для явной
инициализации можно использовать jQuery:
$('.gallery a').featherlightGallery({
previous: '←', // Кнопка "Назад"
next: '→', // Кнопка "Вперед"
galleryFadeIn: 300, // Анимация появления изображения
galleryFadeOut: 300 // Анимация скрытия изображения
});
Ключевые параметры:
previous и next — HTML или текст кнопок
навигации.openSpeed, closeSpeed — скорость анимации
открытия/закрытия модального окна.fadeIn, fadeOut — скорость
появления/исчезновения содержимого.startIndex — номер изображения, с которого открывается
галерея.1. Кастомная разметка модального окна
Featherlight позволяет менять структуру окна через
template:
$.featherlightGallery.prototype.template = `
<div class="featherlight-gallery">
<button class="featherlight-close">×</button>
<div class="featherlight-content"></div>
<button class="featherlight-prev">←</button>
<button class="featherlight-next">→</button>
</div>`;
2. Отображение подписей к изображениям
Для подписи можно использовать атрибут title на
ссылке:
<a href="img/photo1.jpg" data-featherlight="image" data-featherlight-gallery="gallery1" title="Описание фото 1">
<img src="img/thumb1.jpg" alt="Фото 1">
</a>
В JavaScript можно отобразить подпись:
$.featherlightGallery.prototype.afterContent = function() {
var title = this.$currentTarget.attr('title');
if(title){
$('<div class="featherlight-caption"></div>').text(title).appendTo(this.$instance);
}
};
3. Автоматическое кэширование изображений
Featherlight может заранее подгружать соседние изображения для плавной навигации:
$.featherlightGallery.prototype.beforeNext = function(event) {
var nextIndex = (this.current + 1) % this.$gallery.length;
$('<img>').attr('src', this.$gallery.eq(nextIndex).attr('href'));
};
Featherlight поддерживает набор хуков для расширения функционала:
beforeOpen — перед открытием окна.afterOpen — после открытия.beforeClose — перед закрытием.afterClose — после закрытия.beforeNext / afterNext — при переходе к
следующему изображению.beforePrev / afterPrev — при переходе к
предыдущему изображению.Пример:
$('.gallery a').featherlightGallery({
afterOpen: function(event){
console.log('Галерея открыта');
},
afterClose: function(event){
console.log('Галерея закрыта');
}
});
Featherlight Gallery не ограничивается только изображениями. Можно использовать HTML-контент, видео или iframe. Для галерей с видео:
<a href="https://www.youtube.com/embed/abc123" data-featherlight="iframe" data-featherlight-gallery="videos">
Смотреть видео
</a>
Инициализация аналогична изображенческой галерее.
featherlight.min.js), чтобы уменьшить вес страницы.loading="lazy" к превью, чтобы ускорить
начальную загрузку страницы.Featherlight наследует CSS свойства и поддерживает адаптивность. Основные правила:
.featherlight-gallery .featherlight-content img {
max-width: 90vw;
max-height: 80vh;
display: block;
margin: 0 auto;
}
.featherlight-caption {
text-align: center;
padding: 10px 0;
font-size: 0.9em;
color: #555;
}
.featherlight-prev, .featherlight-next {
position: absolute;
top: 50%;
transform: translateY(-50%);
font-size: 2em;
background: rgba(0,0,0,0.3);
color: #fff;
border: none;
cursor: pointer;
}
.featherlight-prev { left: 10px; }
.featherlight-next { right: 10px; }
Использование этих правил обеспечивает корректное отображение галереи на всех устройствах.
Featherlight Gallery по умолчанию поддерживает навигацию стрелками и
закрытие клавишей Esc. Для расширенной настройки можно
добавить:
$(document).on('keydown', function(e){
if($.featherlight.current){
if(e.key === 'ArrowLeft') $.featherlight.current.prev();
if(e.key === 'ArrowRight') $.featherlight.current.next();
if(e.key === 'Escape') $.featherlight.current.close();
}
});
Для галерей, где элементы добавляются после загрузки страницы, используется делегирование:
$(document).on('click', '.dynamic-gallery a', function(e){
e.preventDefault();
$(this).featherlightGallery();
});
Это позволяет работать с AJAX-загруженными изображениями или контентом, созданным через JavaScript.