Featherlight — лёгкая и гибкая библиотека для создания модальных окон на JavaScript. Одной из её мощных возможностей является интеграция с историей браузера, что позволяет создавать модальные окна, поведение которых учитывает навигацию пользователя. Эта функциональность особенно полезна для сложных интерфейсов, где открытие модального окна должно оставлять след в истории и позволять корректное использование кнопок «Назад» и «Вперёд».
Featherlight предоставляет поддержку HTML5 History API через опцию
hash. Использование этой опции позволяет каждому открытому
модальному окну создавать уникальный идентификатор в URL. Например:
$.featherlight($('#modalContent'), {
persist: true,
hash: 'modal1'
});
При открытии такого окна URL браузера автоматически изменится,
добавляя хэш #modal1. Это значит, что пользователь может
использовать кнопку «Назад» для закрытия модального окна без полной
перезагрузки страницы.
Ключевые моменты поведения:
Featherlight корректно обрабатывает сценарии с несколькими модальными
окнами. При использовании опции hash можно задавать разные
значения для каждого окна, что позволяет:
Пример с двумя окнами:
$('#openModal1').featherlight($('#modal1'), { hash: 'modal1' });
$('#openModal2').featherlight($('#modal2'), { hash: 'modal2' });
Если пользователь откроет сначала modal1, затем
modal2, URL будет последовательно изменяться:
#modal1 → #modal2. Нажатие кнопки «Назад»
сначала закроет modal2, оставив modal1
активным, а второе нажатие полностью вернёт к исходному состоянию
страницы.
Для сложной логики можно использовать глобальный обработчик события
hashchange. Это позволяет реагировать на изменение хэша вне
зависимости от действий пользователя:
$(window).on('hashchange', function() {
const hash = location.hash.replace('#', '');
if (!hash) {
$.featherlight.close();
} else {
const modalContent = $('#' + hash);
if (modalContent.length) {
$.featherlight(modalContent);
}
}
});
В этом примере любое изменение хэша синхронизируется с модальными окнами:
Для поддержания состояния окна при перезагрузке страницы используется
опция persist. Она гарантирует, что контент модального окна
не будет удалён из DOM при закрытии:
$.featherlight($('#persistentModal'), { persist: true, hash: 'persistent' });
Такой подход важен при интеграции с динамическими данными или при необходимости сохранить форму в модальном окне между открытием и закрытием.
# не отправляются на сервер.hashchange позволяет реализовать сложные
сценарии, например, восстановление состояния интерфейса при прямом
переходе по ссылке с хэшем.Опция hash совместима с большинством других
настроек:
afterOpen и afterClose позволяют выполнять
дополнительные действия при открытии и закрытии окна.persist сохраняет DOM-содержимое.variant может использоваться для разных визуальных
стилей модальных окон с одним и тем же хэшем.$.featherlight($('#modalExample'), {
hash: 'example',
variant: 'large',
persist: true,
afterOpen: function() { console.log('Окно открыто'); },
afterClose: function() { console.log('Окно закрыто'); }
});
Такой подход обеспечивает полное управление поведением модальных окон, включая интеграцию с историей браузера, визуальное оформление и управление жизненным циклом контента.