Featherlight — это минималистичная библиотека для создания лайтбоксов в JavaScript, ориентированная на простоту и гибкость. Основой работы является управление жизненным циклом лайтбокса: создание, отображение, взаимодействие с пользователем и закрытие. Понимание этого цикла позволяет эффективно настраивать поведение всплывающих окон и интегрировать их в любые веб-приложения.
Создание лайтбокса начинается с вызова метода
$.featherlight(content, options). Параметр
content может быть строкой HTML, селектором DOM-элемента
или функцией, возвращающей содержимое. Параметр options
позволяет настраивать внешний вид и поведение:
$.featherlight('<p>Пример текста</p>', {
variant: 'custom-lightbox',
closeOnClick: 'background'
});
Ключевые моменты инициализации:
variant — CSS-класс, добавляемый к основному контейнеру
лайтбокса, позволяющий задавать уникальные стили.closeOnClick — управление закрытием по клику:
'background', 'anywhere' или
false.persist — флаг, позволяющий повторно использовать
существующее содержимое без его удаления из DOM.При инициализации происходит создание базовой структуры лайтбокса:
.featherlight с затемнённым фоном..featherlight-content.closeButton.Featherlight автоматически добавляет этот контейнер в
body, что упрощает интеграцию и исключает необходимость
ручного управления DOM.
После создания лайтбокса его состояние можно контролировать методами:
open() — открывает лайтбокс, добавляя его на страницу и
применяя анимацию.close() — закрывает лайтбокс и удаляет его элементы из
DOM (если persist: false).toggle() — переключает состояние видимости.Featherlight использует события для контроля отображения:
beforeOpen — срабатывает до того, как лайтбокс будет
вставлен в DOM.afterOpen — вызывается после завершения анимации
открытия.beforeClose — срабатывает перед удалением
лайтбокса.afterClose — вызывается после удаления из DOM.Эти события позволяют внедрять кастомные действия, например, динамическую загрузку контента или трекинг пользовательских действий.
$.featherlight('<p>Контент</p>', {
beforeOpen: function(event){
console.log('Лайтбокс готов к открытию');
},
afterClose: function(event){
console.log('Лайтбокс закрыт');
}
});
Featherlight поддерживает подгрузку AJAX-контента и изображений. Для AJAX достаточно передать URL вместо HTML:
$.featherlight('/ajax/content.html', {
loading: 'Загрузка...',
type: 'ajax'
});
Особенности работы с динамическим контентом:
loading.beforeOpen и afterOpen позволяют
обработать успешное получение данных или ошибки.$.featherlight.current().content().Для изображений используется тип image:
$.featherlight('image.jpg', { type: 'image' });
Библиотека автоматически подбирает размеры изображения и центрирует его в окне.
Закрытие лайтбокса может происходить несколькими способами:
closeOnClick: 'background').closeButton: '✕').$.featherlight.defaults.closeOnEsc).close().Перед закрытием срабатывает событие beforeClose, что
позволяет, например, сохранить состояние или показать подтверждение.
После закрытия вызывается afterClose и при
persist: false элементы удаляются из DOM, освобождая
ресурсы.
Featherlight предоставляет возможность управления анимациями открытия и закрытия через опции:
openSpeed — скорость появления лайтбокса (мс).closeSpeed — скорость исчезновения (мс).fadeIn и fadeOut — включение эффектов
плавного появления и исчезновения.$.featherlight('<p>Контент</p>', {
openSpeed: 300,
closeSpeed: 200,
fadeIn: 400,
fadeOut: 400
});
Эти параметры можно настраивать глобально через
$.featherlight.defaults или локально при вызове.
Featherlight позволяет открывать несколько лайтбоксов последовательно. При этом:
$.featherlight.current() для последнего открытого
окна.$.featherlight('<p>Первый</p>');
$.featherlight('<p>Второй</p>');
Такой подход облегчает создание галерей или последовательных модальных форм.
Использование опции persist: true предотвращает удаление
контента после закрытия, что полезно для повторного отображения без
повторной генерации элементов DOM:
var fl = $.featherlight('<p>Постоянный контент</p>', { persist: true });
fl.open();
fl.close();
fl.open(); // контент сохраняется
Для динамически создаваемых элементов важно правильно управлять памятью, чтобы не создавать утечки при множественных открытых лайтбоксах.
Контент лайтбокса может содержать формы или интерактивные элементы. Featherlight не блокирует их работу, но при этом можно использовать события жизненного цикла для дополнительной логики:
beforeOpen — подготовка формы.afterOpen — установка фокуса на первый элемент
формы.beforeClose — валидация данных перед закрытием.afterClose — очистка полей и сброс состояния.Это позволяет интегрировать лайтбоксы в сложные интерфейсы без потери удобства работы с пользователем.
Жизненный цикл лайтбокса в Featherlight строится вокруг последовательности создания, открытия, управления содержимым и закрытия, обеспечивая гибкость, контроль и возможность интеграции с динамическим контентом. Правильное использование событий, опций и методов позволяет создавать интерактивные, адаптивные и оптимизированные всплывающие окна для любых веб-приложений.