Cash — это компактная и удобная библиотека для работы с DOM, которая во многом повторяет синтаксис jQuery, но при этом отличается минимальным размером и высокой производительностью. Одной из важных областей применения является управление фокусом и доступностью элементов интерфейса, что особенно актуально для создания веб-приложений, соответствующих стандартам WCAG.
Библиотека предоставляет удобные методы для выбора элементов, их манипуляции и управления состоянием, включая фокус и видимость для пользователей с различными потребностями.
Установка и снятие фокуса
Cash использует привычный метод .focus() для установки
фокуса на элемент и .blur() для его снятия. Это позволяет
программно управлять активным элементом на странице.
$('#inputField').focus(); // Устанавливает фокус на поле ввода
$('#inputField').blur(); // Снимает фокус
Проверка, находится ли элемент в фокусе
Чтобы определить, активен ли элемент, можно использовать стандартное
свойство DOM document.activeElement совместно с Cash:
if ($('#inputField')[0] === document.activeElement) {
console.log('Элемент в фокусе');
}
Это особенно полезно при реализации навигации с клавиатуры или контроле состояния форм.
Cash позволяет легко работать с набором элементов и управлять их последовательностью фокуса. Для этого можно использовать цепочку методов и стандартные селекторы:
const focusable = $('button, a, input, select, textarea').toArray();
focusable.forEach((el, index) => {
$(el).on('keydown', (e) => {
if (e.key === 'Tab') {
e.preventDefault();
const nextIndex = (index + 1) % focusable.length;
$(focusable[nextIndex]).focus();
}
});
});
Метод .toArray() позволяет получить массив DOM-элементов
для дальнейшей работы с нативными событиями.
Атрибуты ARIA
Cash поддерживает работу с атрибутами через .attr() и
.removeAttr(), что позволяет динамически управлять
доступностью интерфейса:
$('#menu').attr('aria-hidden', 'true'); // Скрытие меню для скринридеров
$('#menu').attr('aria-hidden', 'false'); // Делает меню доступным
Состояние disabled и tabindex
Для корректной работы фокуса важно управлять атрибутами
disabled и tabindex:
$('#submitButton').attr('disabled', true); // Отключение кнопки
$('#submitButton').removeAttr('disabled'); // Включение кнопки
$('#modal').attr('tabindex', '-1'); // Снимает элемент с естественного порядка табуляции
tabindex="-1" используется для элементов, которые должны
быть доступны программно, но исключены из последовательности
клавиатурной навигации.
Cash облегчает привязку событий фокуса и потери фокуса с помощью
.on():
$('#inputField').on('focus', () => {
console.log('Поле ввода активно');
});
$('#inputField').on('blur', () => {
console.log('Поле ввода потеряло фокус');
});
Кроме того, можно использовать делегирование для динамически добавляемых элементов:
$(document).on('focus', '.dynamic-input', (e) => {
$(e.target).css('border-color', 'blue');
});
Делегирование позволяет обрабатывать фокус для элементов, которые добавляются после первоначальной загрузки DOM.
Cash предоставляет методы .show(), .hide()
и .toggle() для управления видимостью, но важно учитывать,
что скрытие элемента с помощью display: none делает его
недоступным для фокуса и скринридеров. Для управления доступностью
рекомендуется комбинировать CSS и ARIA-атрибуты:
$('#sidebar').hide().attr('aria-hidden', 'true'); // Скрывает и делает недоступным
$('#sidebar').show().attr('aria-hidden', 'false'); // Показывает и делает доступным
Использование .toggle() позволяет создавать
интерактивные элементы управления без нарушения стандартов
доступности.
При создании модальных диалогов важно:
Пример реализации с Cash:
const trigger = $('#openModal');
const modal = $('#modal');
const firstInput = $('#modal input:first');
trigger.on('click', () => {
modal.show().attr('aria-hidden', 'false');
firstInput.focus();
});
$('#closeModal').on('click', () => {
modal.hide().attr('aria-hidden', 'true');
trigger.focus();
});
Для полной блокировки фокуса вне модалки можно использовать метод
обхода Tab, подобно навигации по фокусируемым
элементам.
Cash обеспечивает простое управление фокусом при динамически создаваемых элементах:
$('#addItem').on('click', () => {
const newItem = $('<input type="text" class="dynamic-input">');
$('#container').append(newItem);
newItem.focus();
});
Это позволяет мгновенно фокусировать новые элементы, сохраняя логику доступности и улучшая UX при интерактивных интерфейсах.
Библиотека Cash сочетает лёгкость и удобство с полной поддержкой современных требований доступности. Основные инструменты — управление фокусом, атрибутами ARIA, событиями и видимостью элементов — позволяют создавать интерфейсы, удобные как для мыши и клавиатуры, так и для пользователей вспомогательных технологий.