IFocusableNode 接口
表示任何可以获得输入焦点的对象。
Signature:
export interface IFocusableNode
方法
方法 | 说明 |
---|---|
canBeFocused() | 指示相应节点是否允许聚焦。如果此方法返回 false,则不会调用任何其他 IFocusableNode 方法。 请注意,如果此函数的实现会在节点的生命周期内动态更改其返回值,则必须格外小心,因为某些环境条件可能会影响相应节点 DOM 元素的可聚焦性(例如,元素是否具有正值或零值的 tabindex)。此外,当节点持有焦点时,从 true 更改为 false 值不会立即更改节点的当前焦点或 FocusManager 的内部状态,因此可能会导致在节点失去焦点后调用该节点的某些函数(因为节点在获得焦点时之前被视为可聚焦)。 除非有特殊情况需要跳过此节点以考虑焦点,否则实现应始终在此处返回 true。例如,节点可能处于停用状态、只读状态、纯视觉装饰状态,或者是一个没有视觉表示形式但必须实现此接口的节点(例如,由于父接口扩展了此接口)。在确定节点是否应可聚焦时,请务必遵循无障碍功能最佳实践,因为即使是已停用和只读的元素,通常也与向用户提供组织上下文相关(尤其是在使用屏幕阅读器时)。 |
getFocusableElement() | 返回可明确请求接收焦点的 DOM 元素。 重要提示:请注意,此元素应在网页上具有视觉呈现效果,因为系统会明确聚焦于此元素,并根据其当前聚焦状态(即模糊、主动聚焦和被动聚焦)更改其样式。该元素将附加以下两种样式之一(没有样式表示模糊/未聚焦):- blocklyActiveFocus - blocklyPassiveFocus 返回的元素还必须指定有效的 ID,并且此 ID 在整个网页中应该是唯一的。如果 ID 不够唯一,尝试聚焦一个节点(例如通过鼠标点击)可能会导致 FocusManager 实际聚焦另一个具有相同 ID 的节点。 如果节点通过 FocusManager.focusNode() 或 FocusManager.focusTree() 获得焦点,则返回的元素必须可见。允许元素在 onNodeFocus() 被调用之前处于隐藏状态,或者通过调用 onNodeBlur() 变为隐藏状态。 预计在节点的整个生命周期内,实际返回的元素不会发生变化(即,其属性可以更改,但不应返回新元素)。此外,在相应节点和 FocusManager 的整个生命周期内,返回的元素的 tabindex 将被覆盖。 如果节点需要能够直接聚焦,而无需先通过 FocusManager 聚焦,则必须设置自己的 Tab 键索引。 |
getFocusableTree() | 返回相应节点的最接近的父树(在树具有不同的子树的情况下),表示相应节点所属的树。 |
onNodeBlur() | 当此节点失去有效焦点时调用。它可能仍具有被动对焦功能。 此方法具有与 onNodeFocus() 相同的实现限制。 |
onNodeFocus() | 当此节点获得有效焦点时调用。 请注意,实现可以更改可见性修饰符,但应避免以下情况:- 创建或移除 DOM 元素(包括通过渲染器或抽屉)。- 通过 DOM focus() 调用或 FocusManager 影响焦点。 |