ally.js — это библиотека на JavaScript, предназначенная для обеспечения доступности веб-приложений. Основная задача библиотеки — помочь разработчикам создавать интерфейсы, соответствующие стандартам WCAG (Web Content Accessibility Guidelines), с акцентом на управление фокусом, навигацией и взаимодействием с пользователем.
Библиотека работает на низком уровне, предоставляя инструменты для анализа DOM, управления фокусом, обработки событий клавиатуры и определения доступных для взаимодействия элементов. Она не заменяет фреймворки, а интегрируется с любыми существующими проектами, обеспечивая гибкость и масштабируемость.
ally.js предоставляет функции для определения видимых и интерактивных элементов на странице. Это важно для создания навигации клавиатурой и обеспечения совместимости с экранными читалками.
Пример функции для получения всех интерактивных элементов:
import ally from 'ally.js';
const tabbableElements = ally.query.tabsequence();
console.log(tabbableElements);
Здесь tabsequence() возвращает массив элементов, которые
могут быть доступны через клавишу Tab, с учетом всех атрибутов
tabindex, скрытых элементов и других факторов
доступности.
Библиотека предоставляет удобные методы для установки, перемещения и контроля фокуса:
ally.focus.focusElement(element) — фокусировка на
конкретном элементе.ally.focus.focusNext({context: container}) —
перемещение фокуса к следующему интерактивному элементу внутри
указанного контейнера.ally.focus.focusFirst({context: container}) — установка
фокуса на первый интерактивный элемент в контейнере.Пример динамического перемещения фокуса:
const modal = document.querySelector('#modal');
ally.focus.focusFirst({ context: modal });
Клавиатурная навигация является критически важной частью доступности. ally.js позволяет:
Пример замкнутой области:
const modal = document.querySelector('#modal');
ally.focus.trap(modal, {
onKey: (event, context) => {
if(event.key === 'Escape') {
context.deactivate();
}
}
});
В этом примере фокус остается внутри модального окна, пока оно активно, а клавиша Escape закрывает его и освобождает фокус.
ally.js включает функции для проверки доступности элементов на странице, включая:
ally.query.isVisible(element)).ally.query.isFocusable(element)).ally.query.hasAriaAttribute(element, 'role')).Эти методы полезны для динамических интерфейсов, где DOM меняется после загрузки страницы.
Библиотека позволяет легко управлять ARIA-атрибутами:
const button = document.querySelector('#myButton');
if(!ally.query.hasAriaAttribute(button, 'aria-pressed')) {
button.setAttribute('aria-pressed', 'false');
}
Это обеспечивает корректное взаимодействие с экранными читалками и поддерживает стандарты WCAG.
Набор функций для поиска и анализа элементов:
tabsequence() — интерактивные элементы.firstTabbable() / lastTabbable() — первый
и последний tabbable элементы.isFocusable(element) — проверка возможности
фокусировки.Функции для управления фокусом:
focusElement(element)focusNext(options)focusPrevious(options)trap(container, options) — создание замкнутой
области.Утилиты для работы с DOM, связанные с доступностью:
hasRole(element, role) — проверка роли ARIA.isVisible(element) — видимость элемента.isDisabled(element) — проверка доступности для
взаимодействия.Методы для работы с визуальными аспектами:
Библиотека ally.js является инструментом низкоуровневой работы с доступностью, предоставляя надежный фундамент для создания веб-приложений, удобных для всех пользователей, включая людей с ограничениями возможностей.