Библиотека ally.js предоставляет мощный инструмент
для управления фокусом в веб-приложениях. Функция
ally.element.focus предназначена для установки фокуса на
конкретный элемент и обеспечивает гибкость управления видимостью и
доступностью элементов для пользователей с различными потребностями.
ally.element.focus принимает объект конфигурации, где
ключевым параметром является element. Он может быть:
HTMLElement)string)Пример базового вызова:
ally.element.focus({
element: '#myButton'
});
В этом случае фокус будет установлен на элемент с
id="myButton".
Функция поддерживает несколько параметров, позволяющих точно управлять поведением фокуса:
Тип: HTMLElement | string | function Обязательный
параметр. Определяет элемент, на который будет установлен фокус.
Тип: boolean По умолчанию: false Если
установлено в true, установка фокуса не вызовет прокрутку
страницы к элементу. Полезно для сохранения позиции на странице при
динамическом управлении фокусом.
ally.element.focus({
element: '#inputField',
preventScroll: true
});
Тип: string Возможные значения: 'default',
'focusable', 'tabbable' Определяет, каким
образом библиотека выбирает элемент для фокусировки, если
element не указан напрямую:
default — стандартное поведение браузераfocusable — выбирает первый фокусируемый элемент внутри
контейнераtabbable — выбирает элемент, который может быть
достигнут с помощью клавиши Tabally.element.focus({
element: '#container',
strategy: 'tabbable'
});
Тип: HTMLElement Задает контекст, в котором будет
производиться поиск фокусируемого элемента. Используется совместно со
стратегией focusable или tabbable.
ally.element.focus({
element: '.menu',
strategy: 'focusable',
context: document.querySelector('.menu-wrapper')
});
Тип: boolean По умолчанию: false Если
true, функция будет игнорировать проверку видимости
элемента. Это позволяет установить фокус на скрытые элементы (например,
в модальных окнах перед их показом).
ally.element.focus({
element: '#hiddenInput',
ignoreVisibility: true
});
Тип: boolean По умолчанию: false Если
true, библиотека игнорирует элементы с атрибутом
autofocus. Полезно при динамическом управлении фокусом,
чтобы не конфликтовать с автозаполнением браузера.
Тип: boolean По умолчанию: false Если
true и элемент является <input> или
<textarea>, будет выделен весь текст внутри элемента
после установки фокуса.
ally.element.focus({
element: '#searchInput',
selectText: true
});
Функция возвращает объект с информацией о результатах фокусировки:
success — true, если фокус был успешно
установленelement — элемент, на который был установлен фокусreason — причина, если фокус установить не удалосьПример обработки результата:
const result = ally.element.focus({ element: '#submitButton' });
if (result.success) {
console.log('Фокус установлен на:', result.element);
} else {
console.warn('Не удалось установить фокус. Причина:', result.reason);
}
ignoreVisibility и
context для точного управления фокусом.ally.element.focus автоматически учитывает доступность
элементов: не фокусирует disabled-кнопки, скрытые поля и элементы вне
DOM-контекста, если не включены соответствующие флаги.const modal = document.querySelector('#modal');
ally.element.focus({
element: modal.querySelector('button:first-of-type'),
ignoreVisibility: true
});
ally.element.focus({
element: '#searchBox',
selectText: true
});
ally.element.focus({
element: '#tabContainer',
strategy: 'tabbable'
});
Эта гибкость делает ally.element.focus универсальным
инструментом для обеспечения доступности и удобства взаимодействия с
интерфейсом, позволяя создавать надежное управление фокусом для любых
веб-приложений.