Featherlight — это лёгкая библиотека для реализации модальных окон на
JavaScript с минимальными зависимостями. Одним из ключевых элементов
управления поведением модальных окон являются события жизненного
цикла, одно из которых — afterClose. Оно отвечает
за действия, которые необходимо выполнить после полного закрытия
окна, когда все анимации завершены и DOM-элемент скрыт или
удалён.
Событие afterClose вызывается после того, как
модальное окно полностью исчезло с экрана. На этом этапе:
persist: false.Это делает afterClose идеальным местом для действий,
которые не должны выполняться во время закрытия окна,
например:
Featherlight позволяет задать обработчик события
afterClose при инициализации модального окна через опцию
afterClose. Формат:
$.featherlight('<p>Содержимое окна</p>', {
afterClose: function(event) {
console.log('Модальное окно закрыто');
// Дополнительные действия
}
});
В этом примере:
event — объект события, связанный с закрытием.this внутри функции ссылается на экземпляр
Featherlight, что позволяет обращаться к свойствам окна,
например:afterClose: function(event) {
console.log(this.$content); // Содержимое окна
console.log(this.$instance); // DOM контейнер окна
}
Помимо локальной настройки через опции, Featherlight позволяет подписываться на события глобально, используя jQuery-события:
$(document).on('afterClose.fb', function(event, instance) {
console.log('Модальное окно закрыто глобально');
console.log(instance.$content); // Содержимое закрытого окна
});
Здесь:
afterClose.fb — название глобального события для всех
экземпляров Featherlight.instance — объект текущего экземпляра, аналогичный
this в локальной опции.Это полезно, когда необходимо отслеживать закрытие всех окон на странице.
Featherlight поддерживает несколько событий жизненного цикла, и
понимание их различий помогает использовать afterClose
правильно:
| Событие | Когда срабатывает | Примеры использования |
|---|---|---|
beforeOpen |
Перед открытием окна | Подготовка контента, изменение DOM перед показом |
afterOpen |
После отображения окна | Запуск анимаций, установка фокуса |
beforeClose |
Перед началом закрытия | Проверка условий закрытия, предупреждения |
afterClose |
После полного закрытия окна и завершения анимаций | Очистка контента, сброс состояний, удаление динамических элементов |
Ключевой момент: afterClose всегда
срабатывает после всех анимаций и изменений DOM, связанных с закрытием.
beforeClose срабатывает до этих изменений, что делает их
функционально разными.
$.featherlight('#loginForm', {
afterClose: function() {
this.$content.find('input').val('');
console.log('Форма очищена');
}
});
$.featherlight('<div class="dynamic-content">...</div>', {
afterClose: function() {
this.$content.remove();
console.log('Динамический контент удалён');
}
});
$.featherlight('<p>Дополнительная информация</p>', {
afterClose: function() {
$('body').removeClass('modal-open');
console.log('Страница восстановлена после закрытия модального окна');
}
});
afterClose —
безопасное место, так как окно уже скрыто, и это не нарушает
пользовательский интерфейс.persist: false. В таких случаях
доступ к $content внутри afterClose всё ещё
возможен, пока выполняется функция.body или другие элементы), их сброс можно делать именно в
afterClose, чтобы изменения не мешали анимации
закрытия.Featherlight с событиями жизненного цикла, такими как
afterClose, обеспечивает полный контроль над модальными
окнами, позволяя разделять действия во время закрытия и
после закрытия, что особенно важно при сложной логике
интерфейсов и динамическом содержимом.