Класс FocusManager
Одиночный элемент на каждой странице, который управляет блочным фокусом на одном или нескольких IFocusableTrees и двунаправленно синхронизирует этот фокус с DOM.
Клиенты, желающие явно изменить фокус ввода для выбранных блочных компонентов на странице, должны использовать функции фокусировки в этом менеджере.
Менеджер отвечает за обработку событий фокуса из DOM (которые могут возникать при щелчке пользователей по элементам страницы) и за обеспечение того, чтобы соответствующие IFocusableNodes были четко обозначены как активно/пассивно выделенные таким же образом, как это было бы представлено при вызовах focusNode().
Подпись:
export declare class FocusManager
Конструкторы
Конструктор | Модификаторы | Описание |
---|---|---|
(конструктор)(addGlobalEventListener) | Создает новый экземпляр класса FocusManager . |
Характеристики
Свойство | Модификаторы | Тип | Описание |
---|---|---|---|
ACTIVE_FOCUS_NODE_CSS_CLASS_NAME | | (не объявлено) | Класс CSS, назначенный элементам IFocusableNode, которые в данный момент имеют активный DOM и блочный фокус. Никогда не используйте этот метод напрямую. Вместо этого положитесь на FocusManager, чтобы обеспечить наличие фокуса на узлах (автоматически через DOM-фокус или вручную через различные методы focus*, предоставляемые этим классом). Также рекомендуется не использовать это имя класса в запросах. Вместо этого используйте методы FocusableTreeTraverser или IFocusableTree для поиска конкретного узла. |
PASSIVE_FOCUS_NODE_CSS_CLASS_NAME | | (не объявлено) | Класс CSS, назначенный элементам IFocusableNode, которые в данный момент имеют пассивный фокус (то есть они были последним узлом в своем относительном дереве, который имел активный фокус — см. ACTIVE_FOCUS_NODE_CSS_CLASS_NAME — и снова получат активный фокус, если будет получен запрос на фокусировку окружающего их дерева, т. е. с помощью focusTree ниже). См. ACTIVE_FOCUS_NODE_CSS_CLASS_NAME для получения информации о предостережениях и ограничениях при прямом использовании этой константы (обычно ее никогда не следует использовать). |
Методы
Метод | Модификаторы | Описание |
---|---|---|
эфемерныйFocusTaken() | ||
focusNode(фокусируемыйУзел) | Фокусирует ввод DOM на указанном узле и помечает его как активно сфокусированный. Любой ранее находившийся в фокусе узел будет обновлен и пассивно выделен (если он находится в другом дереве, доступном для фокусировки) или размыт (если он находится в том же дереве). **Важно**: Если предоставленный узел не может быть сфокусирован (например, его метод canBeFocused() возвращает false), он будет проигнорирован, а любое существующее состояние фокуса останется неизменным. Обратите внимание, что это может обновить tabindex элемента указанного узла, чтобы гарантировать его корректное считывание программами чтения с экрана при наличии фокуса. | |
focusTree(focusableTree) | Фокусируется на конкретном объекте IFocusableTree. Это означает либо восстановление активного фокуса на пассивно сфокусированном узле дерева, либо фокус на корневом узле дерева. Обратите внимание, что если указанное дерево уже имеет сфокусированный узел, то это не изменит существующий фокус (если только этот узел не имеет пассивного фокуса, в таком случае он будет восстановлен до активного фокуса). Подробную информацию о влиянии на другие узлы см. в разделе getFocusedNode. | |
getFocusedNode() | Возвращает текущий IFocusableNode с фокусом (который всегда привязан к сфокусированному IFocusableTree) или null, если такового нет. Обратите внимание, что эта функция будет поддерживать паритет с IFocusableTree.getFocusedNode(). То есть, если фокус есть у самого дерева, но ни у одного из его дочерних элементов, кроме корневого, фокус отсутствует, эта функция вернёт значение null, а getFocusedTree() — нет. Также обратите внимание, что если в данный момент захвачен эфемерный фокус (например, с помощью takeEphemeralFocus), то возвращаемый здесь узел может в данный момент не иметь фокуса DOM. | |
получитьFocusedTree() | Возвращает текущий IFocusableTree, имеющий фокус, или null, если в данный момент фокуса нет. Также обратите внимание, что если в данный момент захвачен эфемерный фокус (например, с помощью takeEphemeralFocus), то возвращаемое здесь дерево может в данный момент не иметь фокуса DOM. | |
получитьFocusManager() | static | Возвращает глобальный FocusManager страницы. Возвращаемый экземпляр гарантированно не изменится при вызовах функций, но может измениться при загрузке страницы. |
isRegistered(дерево) | Возвращает, было ли указанное дерево уже зарегистрировано в этом менеджере с помощью registerTree и еще не было отменено с помощью unregisterTree. | |
registerTree(дерево, rootShouldBeAutoTabable) | Регистрирует новый IFocusableTree для автоматического управления фокусом. Если в дереве в данный момент имеется элемент с фокусом DOM, то это не повлияет на внутреннее состояние в этом менеджере до тех пор, пока фокус не перейдет на новый, теперь отслеживаемый элемент/узел. Эта функция выдаёт исключение, если предоставленное дерево уже зарегистрировано в этом менеджере. Используйте isRegistered для проверки в случаях, когда невозможно точно определить, зарегистрировано ли дерево. Регистрацию дерева можно настроить для настройки автоматических табуляторов. Это, в частности, позволяет пользователю переходить к корню дерева с помощью клавиши Tab, но только когда дерево не находится в фокусе. Если эта функция отключена, корень дерева автоматически становится фокусируемым (но не активным для табуляции) при первом фокусе, как и любой другой фокусируемый узел. | |
takeEphemeralFocus(focusableElement) | Эфемерно фиксирует фокус на определённом элементе до вызова возвращаемого лямбда-выражения. Ожидается, что это будет особенно полезно для эфемерных UI-процессов, таких как диалоговые окна. ВАЖНО: возвращаемая лямбда-функция *должна* быть вызвана, иначе автоматическая фокусировка больше не будет работать нигде на странице. Настоятельно рекомендуется привязать вызов лямбды к закрытию соответствующего пользовательского интерфейса, чтобы при ручном изменении ввода на элемент за пределами эфемерного пользовательского интерфейса пользовательский интерфейс закрывался, а автоматический ввод восстанавливался. Обратите внимание, что эта лямбда-функция должна быть вызвана ровно один раз, и последующие вызовы приведут к ошибке. Обратите внимание, что менеджер продолжит отслеживать входные сигналы DOM даже при активном эфемерном фокусе, но фактически не изменит состояние узла до тех пор, пока не будет вызвана возвращаемая лямбда-функция. Кроме того, в любой момент времени может быть активен только один контекст эфемерного фокуса (попытка активировать более одного одновременно приведёт к ошибке). | |
unregisterTree(дерево) | Отменяет регистрацию IFocusableTree в автоматическом управлении фокусом. Если в дереве ранее был выделенный узел, его подсветка будет снята. Эта функция НЕ изменяет фокус DOM. Эта функция срабатывает, если предоставленное дерево в данный момент не зарегистрировано в этом менеджере. Эта функция сбросит tabindex корневого элемента дерева, если дерево было зарегистрировано с автоматическим управлением вкладками. |