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 成為焦點,則必須自行設定索引標籤。 |
getFocusableTree() | 傳回這個節點最接近的父項樹狀結構 (如果樹狀結構下方有不同的樹狀結構),代表這個節點所屬的樹狀結構。 |
onNodeBlur() | 當這個節點失去有效焦點時呼叫。可能仍處於被動對焦狀態。 這項限制與 onNodeFocus() 相同。 |
onNodeFocus() | 當這個節點收到有效焦點時呼叫。 請注意,實作項目可以變更可見度修飾符,但應避免下列情況:- 建立或移除 DOM 元素 (包括透過轉譯器或抽屜)。- 透過 DOM focus() 呼叫或 FocusManager 影響焦點。 |