Featherlight — это лёгкая библиотека для создания модальных окон на базе jQuery. Она отличается минимальным весом и простотой расширения. В основе её работы лежит принцип легковесного оверлея, который позволяет открывать контент поверх страницы без полной перезагрузки DOM-структуры.
Библиотека строится вокруг основного конструктора
$.featherlight, который принимает контент и набор
опций для управления поведением модального окна. Контент может быть
представлен как HTML, изображение, AJAX-запрос или функция, возвращающая
элемент.
$.featherlight('<p>Пример контента</p>', {
variant: 'my-lightbox',
closeOnClick: 'background'
});
Ключевые методы и свойства экземпляра:
open() — открывает модальное окно.close() — закрывает текущее окно.content() — возвращает или обновляет содержимое.$.featherlight.defaults — глобальные настройки по
умолчанию.С течением времени Featherlight претерпела изменения, и некоторые методы и опции стали deprecated, что важно учитывать при поддержке старого кода.
$.featherlight.current()Ранее широко использовался для получения текущего открытого окна.
Сегодня рекомендуется работать с экземплярами напрямую, поскольку
current() не гарантирует актуальное состояние, если
одновременно открыто несколько оверлеев.
// Устаревший подход
var currentLightbox = $.featherlight.current();
// Рекомендуемый современный подход
var instance = $.featherlight.activeInstance;
closeSpeedРанее управляла скоростью анимации закрытия окна (в миллисекундах).
Сейчас поддерживается стандартная анимация jQuery через
fadeOut и контролируется через afterClose и
CSS-анимации.
// Устаревший синтаксис
$.featherlight.defaults.closeSpeed = 200;
// Современный подход
$.featherlight.defaults.afterClose = function(event){
$(event.target).fadeOut(200);
};
persistФлаг persist использовался для того, чтобы содержимое
оставалось в DOM после закрытия модального окна. В новых версиях
рекомендуется использовать собственное управление DOM через коллбэки
beforeClose и afterClose.
// Устаревший синтаксис
$.featherlight('<div>Контент</div>', { persist: true });
// Современный подход
$.featherlight('<div>Контент</div>', {
afterClose: function(event){
$('#myContent').appendTo('body');
}
});
onCloseРанее Featherlight предоставляла коллбэк onClose,
который срабатывал при закрытии окна. В последних версиях его заменили
на afterClose для унификации с другими событиями жизненного
цикла.
// Устаревший синтаксис
$.featherlight('<p>Текст</p>', {
onClose: function(){ console.log('Закрыто'); }
});
// Современный синтаксис
$.featherlight('<p>Текст</p>', {
afterClose: function(){ console.log('Закрыто'); }
});
Featherlight поддерживала несколько способов инициализации, которые сейчас считаются устаревшими:
rel<a href="#inline" rel="featherlight">Открыть</a>
Использование rel="featherlight" устарело из-за
конфликта с SEO и семантикой HTML. Рекомендуется применять
data-featherlight.
<a href="#inline" data-featherlight="inline">Открыть</a>
$('selector').featherlight() без
явных опцийРанее такой вызов создавал модальное окно с контентом по умолчанию. Сейчас это считается менее прозрачным, и для читаемости кода рекомендуется всегда указывать тип и параметры.
// Устаревший
$('#button').featherlight();
// Рекомендуемый
$('#button').featherlight({
targetAttr: 'data-featherlight',
closeOnClick: 'background'
});
Использование deprecated функций может приводить к:
Для проектов, которые полагаются на устаревшие возможности Featherlight, возможны два подхода:
$.featherlight.current = function() {
return $.featherlight.activeInstance;
};
afterClose,
beforeOpen и data- атрибутов.Пример 1. Замена closeSpeed на
CSS-анимацию
.featherlight {
transition: opacity 0.3s ease;
}
.featherlight.close {
opacity: 0;
}
$.featherlight.defaults.afterClose = function(event){
$(event.target).removeClass('close');
};
Пример 2. Замена persist на управление DOM через
коллбэк
$.featherlight('<div id="myContent">Контент</div>', {
afterClose: function(event){
$('#myContent').appendTo('body');
}
});
Пример 3. Использование data-featherlight вместо
rel
<a href="#inlineContent" data-featherlight="inline">Открыть окно</a>
<div id="inlineContent" style="display:none;">
<p>Содержимое модального окна</p>
</div>
Эти подходы обеспечивают совместимость с современными браузерами, уменьшают риск конфликтов и упрощают поддержку кода при обновлении библиотек.