ally.element.blur — это функция библиотеки ally.js, предназначенная для управления фокусом элементов на странице с учетом принципов доступности. Она предоставляет удобный способ программно снимать фокус с элементов, при этом учитывая, как это влияет на навигацию с клавиатуры и взаимодействие для пользователей вспомогательных технологий.
Снятие фокуса с конкретного элемента Функция позволяет снять фокус с любого элемента DOM, переданного в качестве аргумента. Это особенно важно для динамически создаваемых компонентов интерфейса, модальных окон и всплывающих подсказок, где необходимо контролировать фокус после закрытия или переключения состояния.
Поддержка безопасного взаимодействия с вспомогательными
технологиями ally.js гарантирует, что при снятии фокуса с
элемента не нарушается логика работы клавиатурной навигации и чтения
экранными читалками. В отличие от прямого вызова
element.blur(), ally.js учитывает особенности браузеров и
ARIA-атрибутов.
ally.element.blur(element, [options]);
Параметры:
element — обязательный. DOM-элемент, с которого
нужно снять фокус.
options — необязательный объект с дополнительными
настройками:
preventScroll (boolean) — предотвращает прокрутку
страницы при снятии фокуса.silent (boolean) — если true, отключает
любые события, которые обычно вызываются при снятии фокуса.Возвращаемое значение: Объект с информацией о результате операции:
success — true, если фокус был успешно
снят.reason — строка с причиной, если операция не
удалась.const modalCloseButton = document.querySelector('#close-modal');
// Снимаем фокус с кнопки после закрытия модального окна
ally.element.blur(modalCloseButton, { preventScroll: true });
В этом примере после закрытия модального окна фокус удаляется с кнопки без прокрутки страницы, что обеспечивает плавное взаимодействие и сохраняет пользовательский контекст.
Элементы, недоступные для фокуса Если переданный
элемент не является фокусируемым (tabindex="-1" или скрыт
через CSS display: none / visibility: hidden),
ally.element.blur корректно обработает ситуацию и вернет
success: false с объяснением.
Множественные элементы Для снятия фокуса с нескольких элементов следует вызывать функцию отдельно для каждого элемента. ally.js не поддерживает массив элементов в одном вызове.
Сравнение с HTMLElement.blur()
HTMLElement.blur() мгновенно снимает фокус без
дополнительных проверок, что может вызвать проблемы с доступностью.ally.element.blur() обеспечивает безопасное снятие
фокуса, учитывая скрытые и недоступные элементы, а также предотвращает
непредвиденные события.Работа с модальными окнами Часто используется
вместе с функциями ally.element.focus или
ally.query.nextFocus для правильного переноса фокуса после
закрытия окна, предотвращая “потерю” фокуса на странице.
Перемещение фокуса После снятия фокуса можно автоматически перенести его на следующий логический элемент:
const nextFocusable = ally.query.nextFocus(modalCloseButton);
ally.element.focus(nextFocusable);Снятие фокуса при удалении элемента Если элемент DOM удаляется динамически, перед удалением рекомендуется вызвать:
ally.element.blur(elementBeingRemoved, { silent: true });
Это предотвращает потенциальные ошибки и нарушение навигации клавиатурой.
preventScroll: true для элементов в
фиксированных или модальных контейнерах.Функция ally.element.blur является ключевым инструментом для обеспечения доступности современных веб-приложений, позволяя безопасно управлять фокусом элементов без нарушений навигации клавиатурой или взаимодействия со вспомогательными технологиями. Ее правильное использование помогает создавать интерфейсы, соответствующие стандартам ARIA и WCAG.