Featherlight — это легковесная библиотека для создания модальных окон на JavaScript и jQuery. Она выделяется минималистичностью, гибкостью и простотой настройки. Основной принцип работы заключается в использовании классов и опций, которые управляют поведением модального окна без необходимости глубокого вмешательства в DOM.
Featherlight строится вокруг единственного конструктора, который создаёт экземпляры модальных окон и управляет их жизненным циклом. Каждый экземпляр — это отдельный объект с собственными методами и настройками.
В основе Featherlight лежит система классов, реализованная через
jQuery-подобное наследование. Главный класс называется
$.Featherlight. Его можно расширять для создания кастомных
модальных окон.
var CustomLightbox = $.Featherlight.extend({
// Опции по умолчанию
defaults: {
variant: 'custom',
closeOnClick: true
},
// Переопределение метода инициализации
setup: function() {
this.$instance.addClass('custom-lightbox');
},
// Логика открытия модального окна
open: function(event) {
console.log('Открывается кастомное окно');
this.super('open', event); // Вызов метода родителя
}
});
Ключевые моменты:
extend() создаёт новый класс, наследующий функционал
базового $.Featherlight.defaults задаёт стандартные настройки для всех
экземпляров нового класса.setup, open, close
можно переопределять для кастомного поведения.this.super('метод', args) позволяет вызывать
оригинальную реализацию метода родителя.Каждое окно, созданное через Featherlight, является объектом с определёнными свойствами и методами:
$instance — jQuery-объект, содержащий
DOM модального окна.$content — контент внутри окна.options — объект с опциями конкретного
экземпляра.open(event) — метод для открытия
окна.close(event) — метод для закрытия
окна.destroy() — удаляет экземпляр и
освобождает ресурсы.Пример создания и открытия окна вручную:
var fl = new $.Featherlight('<p>Контент модального окна</p>', {
variant: 'manual',
closeOnClick: false
});
fl.open();
Featherlight поддерживает множество опций, которые управляют поведением окна:
variant — добавляет CSS-класс к
корневому элементу окна.closeOnClick — закрытие при клике вне
окна (true по умолчанию).closeOnEsc — закрытие по клавише
Escape.persist — позволяет повторно
использовать контент без его клонирования.afterOpen,
beforeClose,
afterClose — колбэки, вызываемые в
определённые моменты жизненного цикла.Пример использования колбэков:
$.featherlight('<p>Динамический контент</p>', {
afterOpen: function() {
console.log('Окно открыто');
},
beforeClose: function() {
console.log('Окно готово к закрытию');
}
});
Variants позволяют создавать разные визуальные стили окон без дублирования кода. Variant — это CSS-класс, добавляемый к корневому элементу окна.
$.featherlight('<p>Окно с кастомным стилем</p>', {
variant: 'fancy'
});
CSS-пример:
.featherlight.fancy {
background-color: #222;
color: #fff;
border-radius: 8px;
}
Благодаря классовой системе можно создавать специализированные окна, например, для изображений, форм или AJAX-контента.
Пример расширения для загрузки AJAX-контента:
var AjaxLightbox = $.Featherlight.extend({
loadContent: function() {
var self = this;
$.get(this.options.url).done(function(data) {
self.setContent(data);
});
}
});
new AjaxLightbox({ url: '/data/modal-content.html' }).open();
Особенности:
loadContent переопределяет стандартное поведение
setContent.open,
close, destroy, что упрощает управление
окнами.Featherlight предоставляет несколько событий жизненного цикла, к которым можно привязать обработчики:
beforeOpen — перед открытием
окна.afterOpen — после открытия.beforeClose — перед закрытием.afterClose — после закрытия.resize — при изменении размеров
окна.Пример:
$(document).on('afterOpen.fb', function(event, instance){
console.log('Окно полностью открыто', instance);
});
События позволяют интегрировать модальные окна с другими частями приложения, например, с динамическими формами или графическими элементами.
Система классов Featherlight даёт возможность строить модульную архитектуру модальных окон:
Эта структура делает Featherlight мощным инструментом для создания лёгких и адаптивных модальных окон, подходящих как для небольших сайтов, так и для сложных веб-приложений с большим количеством интерактивных элементов.