Bliss.js предоставляет удобные методы для работы с событиями клавиатуры, что позволяет реализовывать полноценную клавиатурную навигацию по интерфейсу веб-приложения. В основе лежит событийная модель JavaScript, но Bliss.js упрощает работу с ней через обёртки и цепочки методов.
В JavaScript существуют три основных события клавиатуры:
keydown — срабатывает при нажатии клавиши.keypress — срабатывает при вводе символа (устаревшее,
редко используется).keyup — срабатывает при отпускании клавиши.Bliss.js позволяет регистрировать обработчики через метод
on, применяемый к DOM-элементам:
var input = Bliss.$('#input');
Bliss.$(input).on('keydown', function(event) {
console.log('Нажата клавиша: ', event.key);
});
Здесь event.key возвращает строковое представление
клавиши, что значительно упрощает обработку по сравнению с
использованием keyCode.
Для реализации клавиатурной навигации обычно используется
логика перемещения по фокусируемым элементам: кнопки,
ссылки, поля ввода. Bliss.js облегчает работу с DOM-коллекциями через
метод Bliss.$, возвращающий массивоподобный объект, на
который можно навешивать события циклически.
var items = Bliss.$$('.menu-item');
var index = 0;
Bliss.$(document).on('keydown', function(event) {
if(event.key === 'ArrowDown') {
items[index].classList.remove('focused');
index = (index + 1) % items.length;
items[index].classList.add('focused');
}
if(event.key === 'ArrowUp') {
items[index].classList.remove('focused');
index = (index - 1 + items.length) % items.length;
items[index].classList.add('focused');
}
});
Ключевые моменты:
focused для визуального обозначения
текущего элемента.$$, что упрощает работу с
коллекцией.Bliss.js позволяет проверять клавиши и модификаторы (Shift, Ctrl, Alt) через объект события. Это важно для сложных интерфейсов:
Bliss.$(document).on('keydown', function(event) {
if(event.key === 'Enter') {
console.log('Активирован элемент:', items[index].textContent);
}
if(event.key === 'ArrowRight' && event.shiftKey) {
console.log('Перемещение с Shift + стрелка вправо');
}
});
Использование event.shiftKey, event.ctrlKey
и других свойств позволяет создавать комбинации клавиш
для управления интерфейсом.
Для полноценной клавиатурной навигации важна логика фокуса:
items.forEach(function(item, i) {
Bliss.$(item).on('focus', function() {
index = i;
items.forEach(el => el.classList.remove('focused'));
item.classList.add('focused');
});
});
Таким образом:
tabindex для управления порядком
перехода по клавише Tab.for.Часто требуется, чтобы клавиатурная навигация сочеталась с кликами мыши. Bliss.js обеспечивает единый подход:
Bliss.$(items).on('click', function(event) {
items.forEach(el => el.classList.remove('focused'));
event.currentTarget.classList.add('focused');
index = items.indexOf(event.currentTarget);
});
Преимущества такого подхода:
index.При реализации клавиатурной навигации важно учитывать ARIA-атрибуты:
aria-selected для выбора текущего элемента.aria-activedescendant для контейнеров с фокусом.role="menu" и role="menuitem" для
меню.Пример синхронизации состояния с ARIA:
items.forEach(function(item) {
item.setAttribute('role', 'menuitem');
});
function updateFocus(index) {
items.forEach((el, i) => {
el.setAttribute('aria-selected', i === index);
if(i === index) el.focus();
});
}
Bliss.js поддерживает реактивный подход: можно навешивать события на динамически добавленные элементы без повторной инициализации через делегирование событий:
Bliss.$(document).on('keydown', '.menu-item', function(event) {
if(event.key === 'Enter') {
console.log('Активирован динамический элемент:', event.currentTarget.textContent);
}
});
Такой подход позволяет создавать динамические меню и списки, где новые элементы автоматически поддерживают клавиатурную навигацию.
keydown для перемещения и
click для выбора.Bliss.js объединяет простоту работы с DOM и гибкость событийной модели, что делает её мощным инструментом для реализации клавиатурной навигации в современных веб-приложениях.