Featherlight — это лёгкая и минималистичная библиотека для создания модальных окон на JavaScript и jQuery. Одной из ключевых задач при работе с динамическим контентом является корректная индикация загрузки, которая позволяет пользователю понимать, что данные загружаются и обработка продолжается.
Featherlight использует подход ленивой загрузки контента, что делает его особенно полезным при работе с AJAX, изображениями и другими асинхронными ресурсами. Индикация загрузки в этом контексте играет роль визуального маркера процесса загрузки, предотвращая ощущение «замороженности» интерфейса.
Типы контента, требующие индикации загрузки:
Featherlight позволяет настроить спиннер или текстовое
уведомление до полной загрузки контента. Для этого используется
параметр beforeOpen и события жизненного цикла
(beforeContent, afterContent,
afterOpen).
Пример базовой конфигурации:
$.featherlight({
ajax: '/data/content.html',
beforeOpen: function(event){
this.$content.html('<div class="featherlight-spinner">Загрузка...</div>');
},
afterContent: function(){
this.$content.find('.featherlight-spinner').remove();
}
});
Разбор кода:
beforeOpen вызывается до создания модального
окна, здесь можно вставить спиннер или текст «Загрузка».afterContent выполняется после подгрузки
контента, что позволяет удалить индикатор и показать основной
контент.Featherlight не ограничивает визуальное оформление индикатора. Можно использовать CSS-анимации, GIF или SVG:
.featherlight-spinner {
width: 50px;
height: 50px;
margin: 50px auto;
border: 5px solid #ccc;
border-top: 5px solid #333;
border-radius: 50%;
animation: spin 1s linear infinite;
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
Этот спиннер можно динамически вставлять через
beforeOpen, а после загрузки — удалять через
afterContent.
Для асинхронного контента часто используется параметр
ajax:
$('.open-modal').featherlight({
ajax: '/user/profile.html',
beforeOpen: function(){
this.$content.html('<p>Подождите, идет загрузка...</p>');
},
afterContent: function(){
this.$content.find('p').remove();
}
});
Особенности:
beforeOpen и afterContent позволяют
обеспечить плавный UX, показывая индикатор до момента полной
загрузки.Для изображений, особенно крупных, имеет смысл использовать отложенную загрузку с индикацией:
$.featherlight('<img src="large-image.jpg" />', {
beforeOpen: function(){
this.$content.html('<div class="featherlight-spinner"></div>');
},
afterContent: function(){
var img = this.$content.find('img');
img.on('load', function(){
$('.featherlight-spinner').remove();
img.show();
});
img.hide();
}
});
Принцип работы:
load срабатывает, спиннер удаляется, и
изображение становится видимым.Featherlight предоставляет множество событий, которые можно использовать для управления индикаторами:
beforeOpen — до создания окна.afterOpen — после создания окна.beforeContent — перед добавлением контента.afterContent — после подгрузки контента.beforeClose — перед закрытием окна.afterClose — после закрытия окна.Для индикации загрузки чаще всего применяются
beforeOpen, beforeContent и
afterContent.
Спиннеры и индикаторы можно подключать через Spin.js, Lottie или любые CSS-анимации. Пример с Spin.js:
var spinner;
$.featherlight({
ajax: '/data/content.html',
beforeOpen: function(){
spinner = new Spinner().spin(this.$content[0]);
},
afterContent: function(){
spinner.stop();
}
});
Такой подход позволяет использовать сложные анимации без изменения структуры Featherlight.
Featherlight, благодаря своей лёгкости, предоставляет гибкий механизм для индикации загрузки. Сочетание событий жизненного цикла, динамических спиннеров и поддержки AJAX позволяет создавать плавные и отзывчивые модальные окна.