blockly > FocusManager

FocusManager 類別

每個網頁的單例項,可管理一或多個 IFocusableTree 的 Blockly 焦點,並與 DOM 雙向同步處理這個焦點。

如要明確變更頁面上特定 Blockly 元件的輸入焦點,呼叫端應使用這個管理工具中的焦點函式。

管理員負責處理 DOM 中的焦點事件 (可能因使用者點選網頁元素而產生),並確保對應的 IFocusableNodes 會清楚標示為主動/被動醒目顯示,就像透過呼叫 focusNode() 表示一樣。

Signature:

export declare class FocusManager 

建構函式

建構函式 修飾符 說明
(constructor)(addGlobalEventListener) 建構 FocusManager 類別的新例項

屬性

屬性 修飾符 類型 說明
ACTIVE_FOCUS_NODE_CSS_CLASS_NAME

static

readonly

(未聲明)

目前具有有效 DOM 和 Blockly 焦點的 IFocusableNode 元素所指派的 CSS 類別。

請勿直接使用這個屬性。請改用 FocusManager,確保節點具有有效焦點 (透過 DOM 焦點自動設定,或透過這個類別提供的各種焦點* 方法手動設定)。

建議您也不要使用這個類別名稱進行查詢。請改用 FocusableTreeTraverser 或 IFocusableTree 的方法尋找特定節點。

PASSIVE_FOCUS_NODE_CSS_CLASS_NAME

static

readonly

(未聲明)

指派給目前具有被動焦點的 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。