Featherlight — это лёгкая библиотека для создания модальных окон на основе jQuery, отличающаяся минимализмом и высокой кастомизируемостью. Одной из мощных возможностей является работа с множественными экземплярами, что позволяет одновременно управлять несколькими модальными окнами, создавать вложенные окна и гибко контролировать их поведение.
Каждый экземпляр Featherlight создаётся при вызове метода
$.featherlight или через привязку к элементу с помощью
jQuery:
var instance1 = $.featherlight('<p>Первое окно</p>');
var instance2 = $.featherlight('<p>Второе окно</p>');
Каждый вызов возвращает объект экземпляра, который содержит свойства и методы для управления конкретным окном. Среди ключевых свойств:
instance.$content — jQuery-объект с содержимым
окна.instance.$current — текущий DOM-элемент окна.instance.options — набор настроек экземпляра.Методы экземпляра позволяют управлять окном независимо:
instance.open() — открывает окно.instance.close() — закрывает окно.instance.toggle() — переключает состояние окна.Использование отдельных экземпляров позволяет одновременно держать несколько открытых окон и управлять ими независимо.
Каждое окно может иметь собственные параметры, которые задаются при инициализации:
var instance = $.featherlight('<p>Окно с настройками</p>', {
closeOnClick: 'background', // закрытие при клике на фон
closeOnEsc: true, // закрытие по ESC
variant: 'custom-style' // дополнительный CSS-класс
});
Важно: Параметры экземпляра не влияют на другие окна. Это позволяет создавать окна с разными эффектами, размерами и поведением в рамках одного проекта.
Featherlight поддерживает открытие вложенных окон:
var first = $.featherlight('<p>Первое окно <button id="openSecond">Открыть второе</button></p>');
$('#openSecond').on('click', function() {
$.featherlight('<p>Второе окно</p>');
});
Каждое новое окно создаётся как отдельный экземпляр и может быть закрыто независимо. При этом Featherlight автоматически управляет фокусом, предотвращая конфликты между окнами.
Особенности вложенных окон:
Для более сложных сценариев удобно хранить экземпляры в массиве:
var windows = [];
windows.push($.featherlight('<p>Окно 1</p>'));
windows.push($.featherlight('<p>Окно 2</p>'));
windows.push($.featherlight('<p>Окно 3</p>'));
// Закрытие всех окон
windows.forEach(function(win) {
win.close();
});
Такой подход полезен при динамическом создании контента, когда количество модальных окон заранее неизвестно.
Каждый экземпляр Featherlight поддерживает собственные события:
beforeOpen — вызывается перед открытием окна.afterOpen — после открытия.beforeClose — перед закрытием.afterClose — после закрытия.Пример с кастомным поведением для конкретного окна:
$.featherlight('<p>Окно с событиями</p>', {
beforeOpen: function() {
console.log('Окно готовится к открытию');
},
afterClose: function() {
console.log('Окно закрыто');
}
});
Эти события не влияют на другие экземпляры, что обеспечивает полную изоляцию поведения каждого модального окна.
Свойство variant позволяет задавать индивидуальные
CSS-классы:
$.featherlight('<p>Красное окно</p>', { variant: 'red-theme' });
$.featherlight('<p>Синее окно</p>', { variant: 'blue-theme' });
В результате одно окно может быть красным, другое — синим, при этом структура и функциональность остаются стандартными.
variant или id при
сложных интерфейсах с вложенными окнами.Эффективное использование множественных экземпляров Featherlight позволяет строить сложные интерфейсы с независимыми модальными окнами, динамически изменяемым контентом и уникальными настройками для каждого окна, обеспечивая при этом минимальный вес и высокую производительность.