Featherlight — это легковесная библиотека для создания модальных окон и всплывающих слоев. Для её использования необходимо подключить файлы CSS и JavaScript. Обычно это выполняется через CDN:
<link href="https://cdn.jsdelivr.net/npm/featherlight@1.7.14/release/featherlight.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/featherlight@1.7.14/release/featherlight.min.js"></script>
После подключения можно создавать модальные окна с помощью простого
вызова $.featherlight(content, options).
Featherlight предоставляет несколько ключевых методов:
$.featherlight(content, options) — открывает модальное
окно с указанным содержимым. Параметр content может быть
строкой, jQuery-объектом или функцией, возвращающей HTML..close() — закрывает текущее открытое окно.$.featherlight.current() — возвращает объект текущего
модального окна.Опции позволяют настраивать поведение:
targetAttr — атрибут ссылки, содержащий путь к
контенту.variant — добавляет класс для стилизации модального
окна.beforeOpen, afterOpen,
beforeClose, afterClose — колбэки для
выполнения кода на различных этапах жизненного цикла окна.Одним из ключевых преимуществ Featherlight является возможность создавать контент на лету, без необходимости заранее писать HTML в документе.
$('.open-modal').featherlight(function(event){
let dataId = $(this).data('id');
return `<div class="dynamic-content">
<h2>Информация для элемента ${dataId}</h2>
<p>Контент сгенерирован динамически.</p>
</div>`;
});
Здесь функция получает объект события и ссылку на элемент, который вызвал открытие окна. Возвращаемая строка становится содержимым модального окна. Такой подход позволяет создавать уникальные модальные окна для каждого элемента списка или таблицы.
Featherlight поддерживает асинхронную загрузку данных. Это удобно для работы с серверными данными или API.
$('.ajax-modal').featherlight({
ajax: '/api/get-content?id=' + $(this).data('id'),
afterContent: function(){
console.log('Контент загружен и добавлен в окно');
}
});
Параметр ajax принимает URL, откуда загружается
содержимое. Колбэк afterContent выполняется после вставки
HTML, что позволяет инициализировать динамические элементы внутри окна
(например, слайдеры или формы).
Можно комбинировать Featherlight и jQuery для создания интерактивных модальных окон:
$('.interactive-modal').featherlight(function(){
let container = $('<div>').addClass('interactive-wrapper');
$('<h3>').text('Динамическое окно').appendTo(container);
$('<button>').text('Закрыть').on('click', () => $.featherlight.current().close()).appendTo(container);
$('<ul>').append(
$('<li>').text('Пункт 1'),
$('<li>').text('Пункт 2')
).appendTo(container);
return container;
});
В этом примере весь контент создается как jQuery-объекты, что обеспечивает полную управляемость: можно добавлять обработчики событий, анимации и вложенные элементы.
Для более сложных приложений удобно использовать шаблоны HTML и подставлять данные динамически:
function generateTemplate(data){
return `<div class="template">
<h4>${data.title}</h4>
<p>${data.description}</p>
</div>`;
}
$('.template-modal').featherlight(function(){
let data = {title: 'Пример', description: 'Динамически вставленный текст'};
return generateTemplate(data);
});
Такой подход позволяет отделить логику генерации контента от вызова модального окна и поддерживать код чистым и масштабируемым.
Featherlight позволяет управлять динамическим контентом через параметры:
closeOnClick — закрытие окна при клике на фон.persistent — запрет закрытия при нажатии на ESC или
фон.variant — можно добавлять динамически классы для
изменения стилей модальных окон на лету.$('.custom-modal').featherlight(function(){
return '<p>Окно с особым стилем</p>';
}, {
variant: 'custom-style',
closeOnClick: false
});
Использование variant особенно удобно при работе с
динамическим контентом, когда для разных типов данных требуется
отдельная визуальная подача.
Для таблиц или списков с большим количеством элементов динамическая генерация контента позволяет создать уникальное окно для каждого элемента без дублирования HTML:
$('table .info-btn').featherlight(function(){
let rowData = $(this).closest('tr').data();
return `<div class="row-detail">
<strong>${rowData.name}</strong>
<p>${rowData.description}</p>
</div>`;
});
Каждое окно получает данные из строки таблицы и отображает их в отдельном модальном окне.
Featherlight предоставляет гибкие инструменты для динамической генерации контента, поддерживает как статические шаблоны, так и асинхронные данные, интегрируется с jQuery и позволяет строить сложные интерактивные интерфейсы без лишнего кода.