Featherlight — это легковесная библиотека для реализации модальных окон на JavaScript и jQuery. Одним из важных аспектов при работе с модальными окнами является обеспечение удобной клавиатурной навигации, которая позволяет управлять окнами без использования мыши. Это критично для доступности (accessibility) и улучшения пользовательского опыта.
Featherlight по умолчанию поддерживает работу с клавишей
Esc, которая закрывает открытое модальное окно. Это
достигается за счёт привязки события keydown к документу,
когда окно активно:
$(document).on('keydown', function(e) {
if (e.key === "Escape") {
$.featherlight.close();
}
});
Ключевой момент: Featherlight отслеживает, чтобы нажатие Esc закрывало только активное окно, предотвращая случайное закрытие других элементов страницы.
Для полноценной клавиатурной навигации важно реализовать
циклическую фокусировку по интерактивным элементам
внутри окна (кнопки, ссылки, поля ввода). Featherlight предоставляет
доступ к содержимому через объект $.featherlight.current(),
что позволяет динамически управлять фокусом:
var fl = $.featherlight.current();
var focusable = fl.$content.find('a, button, input, textarea, select, [tabindex]:not([tabindex="-1"])');
var first = focusable.first();
var last = focusable.last();
fl.$content.on('keydown', function(e) {
if (e.key === 'Tab') {
if (e.shiftKey && document.activeElement === first[0]) {
e.preventDefault();
last.focus();
} else if (!e.shiftKey && document.activeElement === last[0]) {
e.preventDefault();
first.focus();
}
}
});
Особенности реализации:
Tab перемещает фокус по интерактивным элементам.Shift + Tab позволяет идти в обратном направлении.Featherlight позволяет расширять стандартное поведение, добавляя обработку других клавиш. Например, для галерей изображений удобно использовать стрелки для навигации между элементами:
$(document).on('keydown', function(e) {
var fl = $.featherlight.current();
if (!fl) return;
switch(e.key) {
case 'ArrowRight':
fl.next(); // переход к следующему элементу галереи
break;
case 'ArrowLeft':
fl.prev(); // переход к предыдущему элементу
break;
}
});
Здесь важно проверять наличие активного окна через
$.featherlight.current(), чтобы навигация не срабатывала на
основной странице.
Featherlight поддерживает конфигурацию через опции, которые позволяют включать или отключать определённые клавиатурные функции:
$.featherlight.defaults.closeOnEsc = true;
$.featherlight.defaults.closeOnClick = 'background';
closeOnEsc — закрытие модального окна при нажатии
Esc.closeOnClick — определяет, будет ли окно закрываться
при клике на фон (можно указать 'background',
'anywhere' или false).Дополнительно можно подключить обработку клавиш галереи или кастомных
действий через afterOpen и beforeClose:
$.featherlight('<div>Контент</div>', {
afterOpen: function() {
var fl = this;
fl.$content.on('keydown', function(e) {
if (e.key === 'Enter') {
console.log('Enter нажата внутри модального окна');
}
});
}
});
role="dialog" и управлять атрибутами
aria-modal и aria-hidden для контента за
пределами окна.Клавиатурная навигация в Featherlight — это комбинация встроенных возможностей, расширяемых через обработчики событий и конфигурационные опции. Правильная настройка обеспечивает не только удобство пользователей с мышью, но и полную доступность для пользователей, ориентирующихся на клавиатуру.