Featherlight — это легковесная библиотека для реализации модальных окон в JavaScript, ориентированная на минимализм и гибкость. Основная цель библиотеки — создание модальных элементов без громоздкой структуры и сложной логики. Featherlight строится вокруг принципов простоты и расширяемости, обеспечивая разработчику возможность быстро интегрировать модальные окна с минимальным кодом.
Модальные окна Featherlight создаются с использованием стандартных HTML-элементов и JQuery. Основной вызов выглядит так:
$.featherlight('<p>Содержимое модального окна</p>');
При этом библиотека автоматически создаёт контейнер, затемнённый фон и кнопку закрытия. Featherlight поддерживает как встроенное содержимое, так и загрузку данных через Ajax или из других DOM-элементов.
Featherlight предлагает гибкую систему настроек через объект
options, который передается при вызове:
$.featherlight('<p>Текст окна</p>', {
closeOnClick: 'background',
closeOnEsc: true,
targetAttr: 'href',
persist: true
});
Ключевые параметры:
closeOnClick — позволяет закрывать окно при клике на
фон. Значения: 'background', 'anywhere',
false.closeOnEsc — закрытие окна при нажатии клавиши Esc.
Булевый тип.persist — если true, содержимое модального
окна не удаляется при закрытии, что позволяет сохранять состояние.targetAttr — атрибут HTML-элемента, содержащий ссылку
на контент, например href или
data-featherlight.Сохранение состояния (state persistence) особенно важно,
когда модальное окно содержит формы, вкладки или динамический контент.
Featherlight предоставляет два подхода:
persist: true$.featherlight('#myContent', {
persist: true
});
При этом элемент #myContent не
клонируется, а перемещается в модальное окно и остаётся
доступным после закрытия. Изменения, внесённые пользователем,
сохраняются, потому что это тот же самый элемент, который был в DOM.
Featherlight поддерживает хуки событий: beforeOpen,
afterOpen, beforeClose,
afterClose. Они позволяют сохранить данные формы или
настройки интерфейса.
$('#openModal').featherlight('#formContent', {
afterClose: function(event){
localStorage.setItem('formData', $('#formContent').serialize());
},
afterOpen: function(event){
var data = localStorage.getItem('formData');
if(data) $('#formContent').deserialize(data);
}
});
В этом примере используется сериализация формы в
localStorage, что обеспечивает сохранение
пользовательского ввода между открытиями модального окна.
Featherlight позволяет загружать данные через Ajax, что полезно для больших форм или контента, генерируемого на сервере:
$.featherlight({
ajax: '/getContent',
persist: true,
afterOpen: function(event){
console.log('Контент загружен и готов к использованию');
}
});
С флагом persist: true повторное открытие окна не
требует повторной загрузки Ajax-запроса, что сокращает нагрузку на
сервер и повышает скорость интерфейса.
Библиотека предоставляет возможность расширять функционал через прототипы. Например, можно создать модифицированный тип модального окна с сохранением состояния вкладок:
$.featherlight.prototype.afterClose = function(event){
var activeTab = $(this.$content).find('.tab.active').index();
localStorage.setItem('activeTab', activeTab);
};
$.featherlight.prototype.afterOpen = function(event){
var activeTab = localStorage.getItem('activeTab');
if(activeTab !== null) $(this.$content).find('.tab').eq(activeTab).addClass('active');
};
В этом примере сохраняется активная вкладка между открытиями модального окна, что важно для сложных интерфейсов.
Featherlight позволяет открывать несколько модальных окон
одновременно, однако по умолчанию используется стек модальных окон.
Сохранение состояния каждого окна требует индивидуального
управления persist и уникального контента:
$.featherlight('#firstModal', {persist: true});
$.featherlight('#secondModal', {persist: true});
Каждое окно сохраняет своё состояние независимо, что обеспечивает корректную работу форм и элементов управления.
Ключевое преимущество Featherlight в контексте сохранения состояния заключается в:
persist для сохранения исходного
DOM-элемента.localStorage или другими
механизмами сохранения.Featherlight сочетает минимализм интерфейса и гибкость настройки, что делает его эффективным инструментом для модальных окон с сохранением состояния и динамическим контентом.