Focus-trap — это библиотека для управления фокусом в
веб-приложениях, предназначенная для создания модальных окон,
всплывающих меню и других интерактивных элементов, где необходимо
контролировать навигацию с клавиатуры. Один из ключевых параметров при
создании «ловушки фокуса» — setReturnFocus. Он отвечает за
поведение фокуса после деактивации трепа.
Параметр setReturnFocus определяет, куда будет возвращён
фокус после выхода из активного элемента с зафиксированным фокусом. По
умолчанию Focus-trap возвращает фокус на элемент, который
был активен до активации трепа. Это обеспечивает естественный
пользовательский опыт и предотвращает потерю ориентации при
использовании клавиатуры.
Пример типичной конфигурации трепа с setReturnFocus:
import { createFocusTrap } from 'focus-trap';
const modal = document.getElementById('modal');
const buttonOpen = document.getElementById('openModal');
const trap = createFocusTrap(modal, {
setReturnFocus: buttonOpen
});
buttonOpen.addEventListener('click', () => {
trap.activate();
});
В данном случае после закрытия модального окна фокус вернётся на
кнопку buttonOpen.
setReturnFocus может принимать несколько видов
значений:
Булево значение true или
false
true — поведение по умолчанию: фокус возвращается на
элемент, который был активен до активации трепа.false — фокус не возвращается автоматически, остаётся в
документе или перемещается на первый доступный элемент после
деактивации.DOM-элемент Позволяет явно указать элемент, на который будет возвращён фокус. Это полезно для случаев, когда требуется перенаправление на конкретный элемент, отличающийся от исходного:
setReturnFocus: document.getElementById('customButton')
setReturnFocus: () => document.querySelector('.last-focused')
Функция позволяет динамически определять элемент, например, исходя из состояния интерфейса или пользовательских действий.
setReturnFocus, отсутствует в
DOM или недоступен (например, скрыт через display: none),
фокус будет возвращён на первый доступный элемент в документе или
останется в текущей области фокуса.setReturnFocus: false полезен в ситуациях, когда
управление фокусом требуется полностью перенести на другой скрипт или
библиотеку.onDeactivate можно реализовать
сложные сценарии навигации и анимации, гарантируя корректное
восстановление фокуса.const trap = createFocusTrap(modal, {
setReturnFocus: () => document.querySelector('.active-button'),
onDeactivate: () => console.log('Focus trap деактивирован')
});
setReturnFocus, если модальный
элемент или интерактивный компонент открывается с клавиатуры, чтобы
сохранить доступность (a11y).false без явной причины, так как это
может привести к неожиданным ситуациям для пользователей с клавиатурой и
вспомогательными технологиями.setReturnFocus тесно взаимодействует с:
onDeactivate — позволяет выполнять дополнительные
действия при деактивации трепа и корректно управлять состоянием
интерфейса.fallbackFocus — задаёт элемент, который получает фокус,
если треп не имеет активного элемента при активации. Важно для
предотвращения потери фокуса.initialFocus — определяет, какой элемент получает фокус
при активации трепа, а setReturnFocus отвечает за обратный
путь фокуса.setReturnFocus обеспечивает предсказуемость и контроль
над навигацией клавиатурой, что критично для доступных веб-интерфейсов.
Его гибкость позволяет реализовать как простые сценарии возврата фокуса
на исходный элемент, так и динамическое управление фокусом в сложных
интерфейсах.