Featherlight — лёгкая библиотека для реализации модальных окон на JavaScript. Она поддерживает работу с контентом, загружаемым через Ajax, что позволяет динамически отображать информацию без перезагрузки страницы. Встроенные возможности Featherlight делают процесс интеграции Ajax-интерфейсов быстрым и гибким.
Для работы с Ajax-контентом необходимо подключить основной скрипт библиотеки и CSS:
<link href="featherlight.min.css" rel="stylesheet">
<script src="jquery.min.js"></script>
<script src="featherlight.min.js"></script>
Featherlight использует jQuery для работы с Ajax, поэтому важно подключить jQuery перед скриптом Featherlight.
Основная опция для загрузки Ajax-контента — ajax. Она
принимает URL или функцию, возвращающую URL. Featherlight автоматически
выполнит GET-запрос и подставит результат в тело модального окна:
$.featherlight({
ajax: 'content.html'
});
Можно также привязать Ajax-загрузку к элементу страницы:
<a href="content.html" data-featherlight="ajax">Открыть окно</a>
В этом случае Featherlight прочитает значение атрибута
href и выполнит Ajax-запрос.
Featherlight позволяет кастомизировать Ajax-запрос, передавая объект
ajax с настройками jQuery $.ajax:
$.featherlight({
ajax: {
url: 'content.html',
type: 'POST',
data: { id: 42 },
dataType: 'html',
beforeSend: function(xhr) {
console.log('Запрос отправляется');
},
success: function(data) {
console.log('Данные получены');
},
error: function(xhr, status, error) {
console.error('Ошибка загрузки: ', status);
}
}
});
Ключевые моменты:
url — адрес, по которому выполняется запрос.type — HTTP-метод (GET по умолчанию).data — объект с данными, отправляемыми на сервер.dataType — формат ответа (html,
json, text).beforeSend — функция, вызываемая до отправки
запроса.success и error — обработчики успешного и
неуспешного ответа.Иногда адрес для Ajax-запроса необходимо формировать динамически:
$.featherlight({
ajax: function() {
return '/getContent?id=' + $(this).data('item-id');
}
});
В этом случае функция возвращает URL на момент открытия окна, что позволяет подставлять параметры, зависящие от конкретного элемента.
Featherlight поддерживает загрузку HTML-контента по умолчанию, но можно обрабатывать JSON-ответы и формировать HTML вручную:
$.featherlight({
ajax: {
url: '/api/data',
dataType: 'json',
success: function(response) {
var html = '<h2>' + response.title + '</h2><p>' + response.text + '</p>';
this.setContent(html);
}.bind(this)
}
});
Метод setContent позволяет подставить любые элементы в
тело модального окна. Объект this внутри
success ссылается на текущий экземпляр Featherlight, что
упрощает работу с динамически сформированным контентом.
Featherlight поддерживает отображение индикатора загрузки во время
выполнения Ajax-запроса. По умолчанию это пустой спиннер, но его можно
настроить через loading:
$.featherlight({
ajax: 'content.html',
loading: '<div class="spinner">Загрузка...</div>'
});
Индикатор автоматически отображается до завершения запроса и скрывается после успешного получения данных.
Featherlight предоставляет возможность отменять текущий Ajax-запрос
через событие beforeOpen или beforeClose:
var request = $.ajax({ url: 'content.html' });
$.featherlight({
ajax: request,
beforeClose: function() {
if(request && request.readyState !== 4) {
request.abort();
}
}
});
Это полезно при закрытии модального окна до завершения загрузки, предотвращая лишние обращения к серверу.
Для оптимизации повторных открытий можно хранить ранее загруженный контент:
$.featherlight({
ajax: 'content.html',
afterContent: function() {
this.$content.data('cached', this.$content.html());
},
beforeOpen: function() {
var cached = this.$content.data('cached');
if(cached) {
this.setContent(cached);
return false; // отменяет повторный запрос
}
}
});
Эта техника уменьшает нагрузку на сервер и ускоряет пользовательский интерфейс.
Важно предусматривать ситуации, когда Ajax-запрос не выполняется:
$.featherlight({
ajax: {
url: 'content.html',
error: function() {
this.setContent('<p>Не удалось загрузить данные. Попробуйте позже.</p>');
}.bind(this)
}
});
Использование метода setContent в обработчике
error обеспечивает корректное отображение модального окна
даже при сбое.
Featherlight позволяет открывать модальные окна с разными Ajax-источниками, используя единый обработчик:
$('a[data-featherlight="ajax"]').featherlight({
ajax: function() {
return $(this).attr('href');
}
});
Каждый элемент может содержать уникальный URL в href, а
библиотека автоматически выполнит запрос и подставит результат в
окно.
Featherlight предоставляет мощные средства для работы с динамическим контентом через Ajax. Гибкость настроек, поддержка кастомных обработчиков, индикаторов загрузки и кэширования делает библиотеку удобной для создания современных интерактивных интерфейсов.