FocusManager 類別
每個網頁的單例項,可管理一或多個 IFocusableTree 的 Blockly 焦點,並與 DOM 雙向同步處理這個焦點。
如要明確變更頁面上特定 Blockly 元件的輸入焦點,呼叫端應使用這個管理工具中的焦點函式。
管理員負責處理 DOM 中的焦點事件 (可能因使用者點選網頁元素而產生),並確保對應的 IFocusableNodes 會清楚標示為主動/被動醒目顯示,就像透過呼叫 focusNode() 表示一樣。
Signature:
export declare class FocusManager
建構函式
建構函式 | 修飾符 | 說明 |
---|---|---|
(constructor)(addGlobalEventListener) | 建構 FocusManager 類別的新例項 |
屬性
屬性 | 修飾符 | 類型 | 說明 |
---|---|---|---|
ACTIVE_FOCUS_NODE_CSS_CLASS_NAME |
|
(未聲明) | 目前具有有效 DOM 和 Blockly 焦點的 IFocusableNode 元素所指派的 CSS 類別。 請勿直接使用這個屬性。請改用 FocusManager,確保節點具有有效焦點 (透過 DOM 焦點自動設定,或透過這個類別提供的各種焦點* 方法手動設定)。 建議您也不要使用這個類別名稱進行查詢。請改用 FocusableTreeTraverser 或 IFocusableTree 的方法尋找特定節點。 |
PASSIVE_FOCUS_NODE_CSS_CLASS_NAME |
|
(未聲明) | 指派給目前具有被動焦點的 IFocusableNode 元素的 CSS 類別 (也就是在相對樹狀結構中,最近具有主動焦點的節點,請參閱 ACTIVE_FOCUS_NODE_CSS_CLASS_NAME,如果要求周圍的樹狀結構成為焦點,也就是使用下方的 focusTree,就會再次取得主動焦點)。 如要瞭解直接使用這個常數的注意事項和限制 (一般來說,您絕不會需要使用這個常數),請參閱 ACTIVE_FOCUS_NODE_CSS_CLASS_NAME。 |
方法
方法 | 修飾符 | 說明 |
---|---|---|
ephemeralFocusTaken() | ||
focusNode(focusableNode) | 將 DOM 輸入內容聚焦於指定節點,並標示為主動聚焦。 先前聚焦的節點會更新為被動醒目顯示 (如果位於不同的可聚焦樹狀結構中),或模糊顯示 (如果位於相同的樹狀結構中)。 **重要事項**:如果提供的節點無法成為焦點 (例如 canBeFocused() 方法傳回 false),系統會忽略該節點,且現有的焦點狀態不會變更。 請注意,這可能會更新指定節點的元素 tabindex,確保螢幕閱讀器在焦點位於該節點時,能正確讀出內容。 |
|
focusTree(focusableTree) | 聚焦於特定 IFocusableTree。這表示要將主動焦點還原至樹狀結構的被動焦點節點,或是聚焦樹狀結構的根節點。 請注意,如果指定的樹狀結構已有焦點節點,這不會變更任何現有焦點 (除非該節點具有被動焦點,否則會還原為主動焦點)。 如要進一步瞭解其他節點受到的影響,請參閱 getFocusedNode。 |
|
getFocusedNode() | 傳回目前具有焦點的 IFocusableNode (一律繫結至具有焦點的 IFocusableTree),如果沒有,則傳回 null。 請注意,這個函式會與 IFocusableTree.getFocusedNode() 保持同位。也就是說,如果樹狀結構本身有焦點,但沒有任何非根子項有焦點,這個函式會傳回空值,但 getFocusedTree() 不會。 另請注意,如果目前擷取了暫時性焦點 (例如使用 takeEphemeralFocus),則這裡傳回的節點目前可能沒有 DOM 焦點。 |
|
getFocusedTree() | 傳回目前具有焦點的 IFocusableTree,如果目前沒有任何 IFocusableTree 具有焦點,則傳回 null。 另請注意,如果目前擷取了暫時性焦點 (例如使用 takeEphemeralFocus),則這裡傳回的樹狀結構目前可能沒有 DOM 焦點。 |
|
getFocusManager() | static |
傳回頁面全域 FocusManager。 系統保證傳回的執行個體在函式呼叫之間不會變更,但可能會在頁面載入之間變更。 |
isRegistered(tree) | 傳回指定的樹狀結構是否已使用 registerTree 在這個管理員中註冊,且尚未透過 unregisterTree 取消註冊。 | |
registerTree(tree, rootShouldBeAutoTabbable) | 為自動焦點管理作業註冊新的 IFocusableTree。 如果樹狀結構目前有 DOM 焦點的元素,焦點變更為新的受監控元素/節點之前,這不會影響這個管理工具的內部狀態。 如果提供的樹狀結構已在這個管理員中註冊,這個函式就會擲回。如果無法確定樹狀結構是否已註冊,請使用 isRegistered 進行檢查。 您可以自訂樹狀結構的註冊,設定自動定位點。具體來說,這項功能可讓使用者透過 Tab 鍵導覽至樹狀結構的根目錄,但前提是樹狀結構未持有有效焦點。如果停用這項功能,樹狀結構的根節點會在首次聚焦時自動設為可聚焦 (但不可使用 Tab 鍵),與任何其他可聚焦節點相同。 |
|
takeEphemeralFocus(focusableElement) | 暫時擷取特定元素的焦點,直到呼叫傳回的 lambda 為止。這項功能預期在對話方塊等暫時性 UI 流程中特別實用。 重要事項:傳回的 lambda「必須」呼叫,否則頁面上的任何位置都無法再自動聚焦。強烈建議將 Lambda 呼叫繫結至對應的 UI 關閉,這樣一來,如果手動將輸入內容變更為暫時性 UI 以外的元素,UI 就會關閉並還原自動輸入內容。請注意,這個 lambda 必須只呼叫一次,後續呼叫會擲回錯誤。 請注意,即使暫時性焦點處於啟用狀態,管理工具仍會繼續追蹤 DOM 輸入訊號,但要等到呼叫傳回的 lambda 時,才會實際變更節點狀態。此外,任何時間只能啟用 1 個暫時性焦點背景資訊 (嘗試同時啟用多個會導致擲回錯誤)。 |
|
unregisterTree(tree) | 從自動焦點管理取消註冊 IFocusableTree。 如果樹狀結構先前有焦點節點,系統會移除該節點的醒目顯示。這個函式「不會」變更 DOM 焦點。 如果提供的樹狀結構目前未在這個管理工具中註冊,這個函式就會擲回例外狀況。 如果樹狀結構已註冊自動分頁管理,這個函式會重設樹狀結構的根元素 tabindex。 |