Featherlight — это минималистичная и лёгкая библиотека для создания модальных окон на базе jQuery. Основной принцип работы заключается в том, что она управляет отображением содержимого через overlay и обеспечивает удобное взаимодействие с пользователем без лишнего кода.
Для использования библиотеки необходимо подключить jQuery, после чего подключается сам скрипт Featherlight:
<link href="featherlight.min.css" rel="stylesheet">
<script src="jquery.min.js"></script>
<script src="featherlight.min.js"></script>
Инициализация осуществляется вызовом метода
.featherlight() на элементе триггера:
$('#openModal').featherlight({
content: '<p>Пример содержимого модального окна</p>'
});
Опции и методы позволяют управлять поведением модального окна, включая custom HTML, AJAX-загрузку и callback-функции.
Featherlight имеет встроенную поддержку AJAX, что позволяет динамически загружать содержимое модального окна. Основные варианты использования:
$('#openAjax').featherlight({
ajax: '/path/to/content.html'
});
При вызове с опцией ajax библиотека автоматически
выполнит GET-запрос к указанному URL и вставит полученный HTML в
модальное окно.
Для более гибкой настройки можно использовать следующие опции:
ajaxSettings — объект с настройками jQuery AJAX
(type, data, dataType,
headers).beforeOpen — callback перед открытием модального
окна.afterContent — callback после вставки содержимого, но
до отображения окна.afterOpen — callback после полного открытия окна.Пример расширенной настройки AJAX-запроса:
$('#openAjaxAdvanced').featherlight({
ajax: '/path/to/content.html',
ajaxSettings: {
type: 'POST',
data: { id: 123 },
dataType: 'html'
},
beforeOpen: function(event) {
console.log('Модальное окно готовится к открытию');
},
afterContent: function(event) {
console.log('Контент успешно загружен');
}
});
Featherlight позволяет обрабатывать ошибки AJAX через встроенные callback и события jQuery. Основные сценарии:
dataType.Для обработки ошибок используется стандартная функция
ajaxSettings.error, либо глобальные обработчики jQuery
AJAX:
$('#openAjaxWithError').featherlight({
ajax: '/path/to/nonexistent.html',
ajaxSettings: {
error: function(jqXHR, textStatus, errorThrown) {
alert('Произошла ошибка: ' + textStatus + ' — ' + errorThrown);
}
}
});
Особенности:
jqXHR — объект запроса, содержащий статус, заголовки и
тело ответа.textStatus — строковое описание ошибки
(timeout, error, abort,
parsererror).errorThrown — объект ошибки, возвращённый
сервером.Можно дополнительно использовать beforeOpen или
afterContent, чтобы отображать кастомные сообщения внутри
модального окна:
$('#openAjaxCustomError').featherlight({
ajax: '/path/to/content.html',
ajaxSettings: {
error: function(jqXHR) {
this.$content.html('<p>Не удалось загрузить данные: ' + jqXHR.status + '</p>');
}
}
});
Featherlight поддерживает кастомные индикаторы загрузки через CSS или вставку HTML:
$.featherlight.defaults.loading = '<div class="spinner">Загрузка...</div>';
Индикатор отображается автоматически при использовании AJAX и скрывается после получения содержимого или при возникновении ошибки.
$.featherlight.current() — возвращает текущий экземпляр
открытого модального окна.$.featherlight.close() — закрывает активное окно
программно.$.featherlight.open() — открывает окно с новым
контентом.Эти методы позволяют интегрировать Featherlight с системами уведомлений, валидации форм и динамической подгрузкой данных.
error callback для AJAX-запросов,
чтобы избежать пустых модальных окон при сбоях сервера.ajaxSettings.type и
проверять возвращаемый dataType.beforeOpen и
afterContent для улучшения UX.console.error или
специализированные сервисы мониторинга.$('#openComplex').featherlight({
ajax: '/path/to/content.html',
ajaxSettings: {
type: 'POST',
data: { userId: 42 },
dataType: 'html',
error: function(jqXHR) {
this.$content.html('<p>Ошибка загрузки: ' + jqXHR.status + '</p>');
}
},
beforeOpen: function() {
this.$content.html('<div class="spinner">Загрузка...</div>');
},
afterContent: function() {
console.log('Контент загружен успешно');
}
});
Этот подход обеспечивает:
Featherlight остаётся лёгким инструментом, позволяя управлять динамическим контентом и интегрировать модальные окна в сложные веб-приложения без дополнительных зависимостей.