Библиотека ally.js предназначена для управления
доступностью веб-приложений и поддержания правильного фокуса,
взаимодействия с элементами и ARIA-состояниями. Модуль
ally.maintain используется для
поддержания состояния элементов в DOM, включая фокус,
видимость, управление скроллом и отключение взаимодействий.
Модуль ally.maintain предоставляет методы, которые
позволяют:
Все методы возвращают объект с контролем отмены (disengage), который позволяет корректно завершить поддержание состояния.
maintain.focusМетод предназначен для поддержания фокуса на элементе или в контейнере.
Синтаксис:
ally.maintain.focus(element, options)
Параметры:
element — DOM-элемент, на котором нужно
зафиксировать фокус.
options — объект с настройками:
ignoreKeys — массив клавиш, которые не будут прерывать
фокус.context — DOM-контейнер, внутри которого работает
поддержание.trap — boolean, если true, фокус будет ограничен внутри
контейнера (focus trap).Возвращает: объект с методом
disengage(), который снимает поддержку фокуса.
Пример использования:
const focusMaintainer = ally.maintain.focus(modal, { trap: true });
// Позже можно отключить
focusMaintainer.disengage();
maintain.tabFocusМетод обеспечивает цикл фокуса для интерактивных элементов внутри контейнера. Полезен для модальных окон и виджетов.
Синтаксис:
ally.maintain.tabFocus(container)
container — DOM-элемент, внутри которого необходимо
замкнуть фокус.Tab и Shift+Tab.Возвращает: объект с disengage().
Пример:
const tabTrap = ally.maintain.tabFocus(modalContent);
tabTrap.disengage();
maintain.hiddenМетод позволяет скрывать элементы от клавиатурной навигации и скринридеров, не удаляя их из DOM.
Синтаксис:
ally.maintain.hidden(element)
Особенности:
aria-hidden="true" и
tabindex="-1".Пример:
const hiddenMaintainer = ally.maintain.hidden(sidebar);
hiddenMaintainer.disengage(); // восстанавливает видимость
maintain.disabledПозволяет временно отключать элементы без удаления их из DOM.
Синтаксис:
ally.maintain.disabled(element)
Действия метода:
disabled атрибут для кнопок, input,
select.aria-disabled="true" для совместимости со
скринридерами.Пример:
const disableMaintainer = ally.maintain.disabled(button);
disableMaintainer.disengage(); // возвращает кнопку в активное состояние
maintain.scrollМетод удерживает прокрутку на определенном элементе, предотвращая нежелательное перемещение при модальных диалогах.
Синтаксис:
ally.maintain.scroll(element)
Особенности:
Пример:
const scrollMaintainer = ally.maintain.scroll(modalContainer);
scrollMaintainer.disengage();
maintain.inertМетод делает контейнер неинтерактивным для всех вложенных элементов.
Синтаксис:
ally.maintain.inert(container)
Действия:
aria-hidden="true" и inert
атрибут.Пример:
const inertMaintainer = ally.maintain.inert(backgroundContent);
inertMaintainer.disengage(); // восстанавливает интерактивность
maintain.disableFocusМетод блокирует фокусировку на выбранных элементах без их физического скрытия.
Синтаксис:
ally.maintain.disableFocus(elements)
elements — один или массив DOM-элементов.tabindex="-1".Пример:
const disableFocusMaintainer = ally.maintain.disableFocus(navLinks);
disableFocusMaintainer.disengage();
disengage() —
стандартный способ корректного завершения поддержания состояния.focus + scroll + inert,
чтобы полностью контролировать модальные слои.aria-hidden,
aria-disabled), что обеспечивает корректную работу с
экранными читалками.disengage() возвращаются исходные значения атрибутов и
состояния DOM-элементов.const modal = document.getElementById('modal');
const background = document.getElementById('content');
const submitButton = modal.querySelector('button');
const focusTrap = ally.maintain.focus(modal, { trap: true });
const scrollLock = ally.maintain.scroll(modal);
const backgroundInert = ally.maintain.inert(background);
const buttonDisabled = ally.maintain.disabled(submitButton);
// После закрытия модального окна
focusTrap.disengage();
scrollLock.disengage();
backgroundInert.disengage();
buttonDisabled.disengage();
В этом примере демонстрируется полное управление состоянием интерфейса: фокус, прокрутка, интерактивность элементов и доступность.
Методы ally.maintain обеспечивают
гибкое управление состоянием интерфейса, позволяя создавать доступные,
управляемые и безопасные для клавиатуры и скринридеров веб-приложения.
Их правильное применение повышает удобство и корректность взаимодействия
пользователей с интерфейсом.