Featherlight — это лёгкая библиотека для создания модальных окон в
JavaScript, которая предоставляет гибкие возможности для кастомизации
поведения всплывающих окон. Одним из ключевых инструментов управления
закрытием модального окна является параметр beforeClose. Он
используется для выполнения определённых действий
непосредственно перед закрытием окна, а также для
возможности предотвратить закрытие при определённых условиях.
Параметр beforeClose представляет собой функцию
обратного вызова (callback), которая вызывается сразу перед тем,
как окно будет закрыто. Она позволяет:
Синтаксис параметра:
$.featherlight(content, {
beforeClose: function(event) {
// Логика перед закрытием
return true; // или false для отмены закрытия
}
});
Функция beforeClose получает один аргумент — объект
события event. Этот объект позволяет:
ESC).false.Пример использования event:
$.featherlight('<p>Содержимое окна</p>', {
beforeClose: function(event) {
if(event && event.type === 'click') {
console.log('Закрытие инициировано кликом');
}
return true;
}
});
Возврат значения из функции beforeClose определяет
дальнейшее поведение окна:
true или undefined — окно
закрывается.false — закрытие отменяется.Это позволяет реализовать проверки перед закрытием, например, при незаполненной форме:
$.featherlight('<form id="myForm"><input required></form>', {
beforeClose: function() {
const form = $('#myForm')[0];
if(!form.checkValidity()) {
alert('Форма не заполнена корректно');
return false; // отмена закрытия
}
return true; // закрытие разрешено
}
});
Featherlight не поддерживает асинхронное ожидание внутри
beforeClose напрямую. Однако можно использовать промисы или
таймеры для задержки закрытия, если требуется выполнить асинхронные
операции. Для этого нужно вручную вызвать метод close()
после завершения действия:
$.featherlight('<p>Данные сохраняются...</p>', {
beforeClose: function() {
saveDataAsync().then(() => {
this.close(); // закрытие после завершения асинхронной операции
});
return false; // временно отменяем закрытие
}
});
this)Внутри функции beforeClose объект this
ссылается на текущий экземпляр Featherlight, что
позволяет использовать методы и свойства окна:
this.$content — содержимое модального окна.this.$instance — корневой элемент окна.this.close() — закрытие окна программно.Пример использования контекста:
$.featherlight('<p>Проверка контента</p>', {
beforeClose: function() {
if(this.$content.text().includes('не закрывать')) {
return false; // запрещаем закрытие
}
return true;
}
});
beforeClose часто используется совместно с другими
параметрами Featherlight:
afterClose — вызывается после закрытия
окна. beforeClose позволяет отменить закрытие, а
afterClose выполняется только если окно действительно
закрылось.closeOnClick — если отключено закрытие по клику,
beforeClose может использоваться для условного разрешения
закрытия при определённых кликах.persist — если окно создаётся один раз и используется
повторно, beforeClose помогает контролировать моменты,
когда окно может быть скрыто или закрыто.$.featherlight('<p>Вы уверены?</p>', {
beforeClose: function() {
return confirm('Закрыть окно?');
}
});
$.featherlight('<form id="editForm"><input required></form>', {
beforeClose: function() {
const form = $('#editForm')[0];
if(form.checkValidity()) {
saveFormData(form);
return true;
}
alert('Пожалуйста, заполните все поля');
return false;
}
});
$.featherlight('<p>Содержимое нельзя закрыть</p>', {
beforeClose: function() {
if(this.$content.text().includes('нельзя')) {
console.log('Закрытие заблокировано');
return false;
}
return true;
}
});
Параметр beforeClose обеспечивает гибкий контроль
поведения модальных окон, позволяя внедрять проверки, сохранение данных
и условное закрытие без изменения ядра библиотеки. Он является одним из
основных инструментов для создания интерактивных и безопасных
интерфейсов с использованием Featherlight.