Библиотека ally.js предназначена для улучшения доступности веб-приложений, предоставляя инструменты для контроля фокуса, управления обходом элементов и проверки доступности интерфейсных компонентов. Она реализует возможности, соответствующие стандартам WCAG (Web Content Accessibility Guidelines), и помогает реализовать принципы ARIA (Accessible Rich Internet Applications).
Фокус является ключевым элементом доступности, особенно для пользователей, взаимодействующих с приложением с помощью клавиатуры. ally.js предоставляет несколько способов контроля фокуса:
Методы tabNext и tabPrevious позволяют
программно управлять порядком перехода между фокусируемыми
элементами:
ally.tabNext({
context: document,
strategy: 'closest',
includeOnlyTabbable: true
});
closest, strict).true,
учитываются только элементы, доступные через клавишу Tab.Метод focus позволяет установить фокус на конкретный
элемент, учитывая правила доступности:
const button = document.querySelector('#submit');
ally.focus(button);
Особенности:
display: none и
visibility: hidden.tabindex.Ally.js предоставляет функции для получения списка доступных элементов интерфейса:
const tabbableElements = ally.query.tabbable({
context: document
});
tabindex, скрытые элементы и
disabled.Метод is.focusable(element) проверяет, может ли элемент
получить фокус:
const input = document.querySelector('#name');
if (ally.is.focusable(input)) {
input.focus();
}
Ally.js упрощает работу с ARIA-атрибутами, необходимыми для соответствия WCAG:
aria-hidden="true" исключаются из обхода фокуса.Пример обхода контейнера с учетом ARIA:
const visibleElements = ally.query.tabbable({
context: document.querySelector('#modal')
}).filter(el => !el.hasAttribute('aria-hidden'));
Для модальных окон, всплывающих подсказок и диалогов важно
ограничивать фокус в пределах контейнера. Ally.js предоставляет метод
trap для управления этим:
const modal = document.querySelector('#modal');
const trap = ally.trap(modal);
trap.activate(); // активирует фокусный цикл
trap.deactivate(); // снимает ограничение
Особенности:
Ally.js включает утилиты для динамической проверки состояния интерфейса:
Пример проверки перед фокусировкой:
const element = document.querySelector('#submit');
if (ally.is.tabbable(element)) {
element.focus();
}
Библиотека способствует выполнению требований WCAG:
tabNext, tabPrevious, focus.Ally.js корректно работает с элементами, добавленными в DOM после инициализации:
const newButton = document.createElement('button');
newButton.textContent = 'Click';
document.body.appendChild(newButton);
if (ally.is.focusable(newButton)) {
newButton.focus();
}
Для компонентов с вкладками, аккордеонами и меню можно использовать
комбинацию методов query.tabindex() и фильтров по ARIA:
const interactiveItems = ally.query.focusable({
context: document.querySelector('#accordion')
}).filter(item => item.getAttribute('role') === 'button');
Ally.js обеспечивает комплексное управление доступностью, сочетая возможности работы с фокусом, ARIA-атрибутами и динамическим интерфейсом. Это позволяет создавать веб-приложения, полностью соответствующие требованиям WCAG и обеспечивающие комфортную навигацию для пользователей с разными типами ограничений.