FocusManager 类
一个单例(每个页面一个),用于跨一个或多个 IFocusableTree 管理 Blockly 焦点,并以双向方式将此焦点与 DOM 同步。
如果调用方希望明确更改页面上所选 Blockly 组件的输入焦点,应使用此管理器中的焦点函数。
该管理器负责处理来自 DOM 的焦点事件(可能因用户点击网页元素而产生),并确保相应的 IFocusableNode 清楚地标记为主动/被动突出显示,就像通过调用 focusNode() 来表示一样。
Signature:
export declare class FocusManager
构造函数
构造函数 | 修饰符 | 说明 |
---|---|---|
(构造函数)(addGlobalEventListener) | 构造 FocusManager 类的新实例 |
属性
属性 | 修饰符 | 类型 | 说明 |
---|---|---|---|
ACTIVE_FOCUS_NODE_CSS_CLASS_NAME |
|
(未声明) | 分配给当前具有有效 DOM 和 Blockly 焦点的 IFocusableNode 元素的 CSS 类。 不应直接使用此值。请改用 FocusManager 来确保节点具有有效焦点(通过 DOM 焦点自动实现,或通过此类提供的各种 focus* 方法手动实现)。 建议也不要使用此类名称进行查询。请改用 FocusableTreeTraverser 或 IFocusableTree 的方法来查找特定节点。 |
PASSIVE_FOCUS_NODE_CSS_CLASS_NAME |
|
(未声明) | 分配给当前具有被动焦点(即,它们是其相关树中最近具有主动焦点的节点 - 请参阅 ACTIVE_FOCUS_NODE_CSS_CLASS_NAME - 如果请求其周围的树成为焦点,它们将再次获得主动焦点,即使用下面的 focusTree)的 IFocusableNode 元素的 CSS 类。 如需了解直接使用此常量的注意事项和限制(通常情况下,永远都不应使用此常量),请参阅 ACTIVE_FOCUS_NODE_CSS_CLASS_NAME。 |
方法
方法 | 修饰符 | 说明 |
---|---|---|
ephemeralFocusTaken() | ||
focusNode(focusableNode) | 将 DOM 输入焦点放在指定节点上,并将其标记为处于活跃焦点状态。 任何之前处于聚焦状态的节点都将更新为被动突出显示(如果它位于不同的可聚焦树中)或模糊显示(如果它位于同一可聚焦树中)。 **重要提示**:如果所提供的节点无法聚焦(例如,其 canBeFocused() 方法返回 false),系统会忽略该节点,并且任何现有的聚焦状态都将保持不变。 请注意,这可能会更新指定节点的元素的 tabindex,以确保屏幕阅读器在焦点位于该元素上时可以正确读出该元素。 |
|
focusTree(focusableTree) | 聚焦特定的 IFocusableTree。这表示将有效焦点恢复到树的被动聚焦节点,或聚焦树的根节点。 请注意,如果指定的树已具有焦点节点,则此方法不会更改任何现有焦点(除非该节点具有被动焦点,在这种情况下,该节点将恢复为主动焦点)。 如需详细了解其他节点会受到哪些影响,请参阅 getFocusedNode。 |
|
getFocusedNode() | 返回当前具有焦点的 IFocusableNode(始终与具有焦点的 IFocusableTree 相关联),如果没有,则返回 null。 请注意,此函数将与 IFocusableTree.getFocusedNode() 保持一致。也就是说,如果树本身具有焦点,但其非根子节点都没有焦点,此函数将返回 null,但 getFocusedTree() 不会。 另请注意,如果当前捕获了临时焦点(例如,使用 takeEphemeralFocus),则此处返回的节点可能当前没有 DOM 焦点。 |
|
getFocusedTree() | 返回当前具有焦点的 IFocusableTree;如果没有,则返回 null。 另请注意,如果当前捕获了临时焦点(例如,使用 takeEphemeralFocus),则此处返回的树可能当前没有 DOM 焦点。 |
|
getFocusManager() | static |
返回页面全局 FocusManager。 系统保证返回的实例在函数调用期间不会发生变化,但可能会在网页加载期间发生变化。 |
isRegistered(tree) | 返回指定树是否已使用 registerTree 在此管理器中注册,但尚未通过 unregisterTree 取消注册。 | |
registerTree(tree, rootShouldBeAutoTabbable) | 注册一个新的 IFocusableTree 以进行自动焦点管理。 如果树当前具有 DOM 焦点元素,则在该焦点更改为新的受监控元素/节点之前,它不会影响此管理器中的内部状态。 如果所提供的树已在此管理器中注册,此函数会抛出异常。在无法确定树是否已注册的情况下,请使用 isRegistered 进行检查。 您可以自定义树的注册,以配置自动制表位。具体而言,此功能可让用户能够通过 Tab 键导航到树的根,但前提是该树未处于有效焦点状态。如果此功能处于停用状态,则当树的根首次获得焦点时,系统会自动将其设为可聚焦(但不可通过 Tab 键聚焦),就像任何其他可聚焦节点一样。 |
|
takeEphemeralFocus(focusableElement) | 暂时捕获特定元素的焦点,直到返回的 lambda 被调用。预计这对于对话框等临时界面流程尤其有用。 重要提示:必须调用返回的 lambda,否则自动聚焦功能将无法在网页上的任何位置正常运行。强烈建议将 lambda 调用与相应界面的关闭相关联,这样一来,如果手动将输入更改为临时界面之外的元素,界面应关闭并恢复自动输入。请注意,此 lambda 必须只调用一次,后续调用会抛出错误。 请注意,即使临时焦点处于有效状态,管理器也会继续跟踪 DOM 输入信号,但只有在调用返回的 lambda 时,它才会实际更改节点状态。此外,在任何给定时间,只能有 1 个临时焦点上下文处于活跃状态(尝试同时激活多个临时焦点上下文会导致抛出错误)。 |
|
unregisterTree(tree) | 从自动焦点管理中取消注册 IFocusableTree。 如果树之前有焦点节点,则会移除其突出显示效果。此函数不会更改 DOM 焦点。 如果所提供的树当前未在此管理器中注册,此函数会抛出异常。 如果树已注册为自动标签页管理,此函数将重置树的根元素的 tabindex。 |