Библиотека ally.js предоставляет мощный инструмент
для работы с доступностью веб-приложений. Модуль
ally.when.key предназначен для упрощения обработки
клавиатурных событий и позволяет реагировать на конкретные нажатия
клавиш с гибкой настройкой условий срабатывания.
Прослушивание конкретных клавиш
ally.when.key позволяет задать одну или несколько клавиш,
на которые необходимо реагировать. Поддерживаются как строковые
обозначения клавиш ('Enter', 'Escape'), так и
коды клавиш ('KeyA', 'ArrowDown').
Фильтрация по целевым элементам Можно указать селекторы или DOM-элементы, для которых будет актуально событие. Это исключает ненужные срабатывания при взаимодействии с другими частями интерфейса.
Комбинации клавиш и модификаторы Поддерживаются
сочетания клавиш с модификаторами: Shift,
Ctrl, Alt, Meta. Например, можно
настроить обработчик только для Ctrl+Enter или
Shift+ArrowUp.
Управление поведением событий С помощью
параметров preventDefault и stopPropagation
можно контролировать стандартное поведение браузера и всплытие событий,
что особенно полезно для сложных интерфейсов.
ally.when.key({
key: 'Escape', // Строка или массив клавиш
context: document, // DOM-элемент или селектор
event: 'keydown', // 'keydown' | 'keyup' | 'keypress'
default: false, // Предотвратить действие по умолчанию
stop: false, // Остановить всплытие события
filter: function(event) { // Дополнительная фильтрация
return event.target.tagName !== 'INPUT';
}
}).then(function(event) {
console.log('Нажата клавиша Escape');
});
Ключевые параметры:
key – одна клавиша или массив клавиш, на которые
реагирует обработчик.context – область документа, где отслеживаются события.
По умолчанию это document.event – тип события клавиатуры (keydown,
keyup, keypress).default – если true, стандартное поведение
клавиши не выполняется.stop – если true, событие не будет
всплывать.filter – функция для дополнительной фильтрации,
возвращающая true для разрешённых случаев.ally.when.key({
key: 'Enter',
context: document
}).then(function(event) {
console.log('Нажата клавиша Enter');
});
ally.when.key({
key: ['KeyS'],
context: document,
filter: function(event) {
return event.ctrlKey; // Только Ctrl+S
}
}).then(function(event) {
console.log('Сохранение документа');
});
ally.when.key({
key: 'Escape',
context: document,
filter: function(event) {
return !event.target.matches('input, textarea'); // Игнорируем поля ввода
}
}).then(function(event) {
console.log('Закрыть модальное окно');
});
ally.when.key({
key: 'Tab',
context: document,
default: true,
stop: true
}).then(function(event) {
console.log('Смена фокуса через Tab управляется вручную');
});
ally.when.key часто комбинируется с:
ally.query.focused – для проверки
текущего элемента с фокусом перед выполнением действия.ally.maintain.tab.focus – для
управления циклом табуляции в модальных окнах или динамических
интерфейсах.ally.focus.trap – чтобы ограничить
фокус внутри определённой области и реагировать на Escape для
выхода.Такое сочетание позволяет строить полностью доступные интерфейсы, где клавиатурная навигация работает интуитивно и предсказуемо.
ally.when.key использует промисы, что
позволяет выстраивать цепочки действий и асинхронную логику без
вложенных коллбэков.destroy() для прекращения
отслеживания событий.