Featherlight — это легковесная библиотека для реализации модальных
окон (lightbox) на JavaScript и jQuery. Она обеспечивает простое
управление отображением, скрытием и динамическим контентом без
перегрузки проекта лишними зависимостями. В основе работы лежит объект
$.featherlight, который отвечает за создание, настройку и
контроль жизненного цикла компонентов.
Базовый синтаксис вызова выглядит следующим образом:
$.featherlight('<p>Простой контент</p>');
В этом случае создается модальное окно с указанным содержимым. Featherlight автоматически создает обертку, добавляет фон и навешивает обработчики закрытия.
Featherlight позволяет задавать множество параметров, которые влияют на поведение модального окна. Основные из них:
closeOnClick — закрытие окна при клике
на фон. Значение по умолчанию: 'background'.closeOnEsc — закрытие по клавише Esc.
По умолчанию включено (true).persist — определяет, сохраняется ли
контент при повторных открытых модальных окон (false по
умолчанию).variant — добавляет дополнительный
CSS-класс к окну, позволяя использовать кастомные стили.Пример с настройкой:
$.featherlight('<p>Контент с опциями</p>', {
closeOnClick: 'anywhere',
closeOnEsc: true,
variant: 'custom-lightbox'
});
Featherlight управляет жизненным циклом модальных окон через цепочку событий, которые можно перехватывать и настраивать:
beforeOpen — вызывается перед
открытием окна. Можно изменить содержимое или подготовить данные.afterOpen — выполняется после
добавления окна в DOM. Подходит для инициализации дополнительных
скриптов.beforeClose — срабатывает перед
закрытием окна. Можно отменить закрытие, вернув false.afterClose — событие после удаления
окна из DOM. Используется для очистки ресурсов или отмены
слушателей.Пример использования событий:
$.featherlight('<p>Контент с событиями</p>', {
beforeOpen: function() {
console.log('Модальное окно готово к открытию');
},
afterOpen: function() {
console.log('Модальное окно открыто');
},
beforeClose: function() {
console.log('Модальное окно собирается закрыться');
},
afterClose: function() {
console.log('Модальное окно закрыто и удалено');
}
});
Эти события обеспечивают полный контроль над поведением модального окна и позволяют интегрировать Featherlight с динамическими интерфейсами.
Featherlight поддерживает загрузку контента через AJAX, что делает
библиотеку гибкой для сложных приложений. Для этого используется опция
ajax:
$.featherlight({
ajax: '/data/content.html',
afterContent: function() {
console.log('Динамический контент загружен');
}
});
afterContent — событие, срабатывающее
после загрузки контента. Позволяет инициализировать скрипты для
динамически добавленных элементов.Featherlight предоставляет методы для ручного управления жизненным циклом:
open() — открывает окно
программно.close() — закрывает текущее окно.$.featherlight.current() — возвращает
текущий активный экземпляр модального окна.Пример:
var fl = $.featherlight('<p>Программное управление</p>');
fl.open();
setTimeout(function() {
fl.close();
}, 3000);
Это позволяет интегрировать модальные окна с событиями интерфейса, таймерами и пользовательскими действиями.
Featherlight поддерживает наследование, что удобно для создания
специализированных модальных окон. Для этого используется метод
extend:
var MyLightbox = $.featherlight.extend({
afterOpen: function() {
console.log('Мой кастомный lightbox открыт');
}
});
new MyLightbox('<p>Наследуемый контент</p>');
Featherlight автоматически создает обертку с классом
.featherlight и удаляет её после закрытия, если
persist равен false. Для оптимизации работы с
ресурсами важно учитывать:
persist.Пример контроля жизненного цикла с очисткой ресурсов:
$.featherlight('<p>Контент с очисткой</p>', {
afterClose: function() {
$(this.$content).find('.temp-widget').remove();
}
});
Featherlight тесно интегрируется с jQuery, что делает возможным:
$('#open-button').click(function() {
$.featherlight('<p>Открыто по клику</p>');
});
$('a.gallery-item').featherlight({
targetAttr: 'href'
});
$.featherlight.current().Эта интеграция упрощает управление жизненным циклом компонентов и позволяет использовать мощь jQuery для динамических интерфейсов.