blockly > FocusManager

Klasa FocusManager

Singleton na stronie, który zarządza fokusem Blockly w co najmniej 1 obiekcie IFocusableTree i dwukierunkowo synchronizuje ten fokus z DOM.

Dzwoniący, którzy chcą wyraźnie zmienić fokus wprowadzania danych w przypadku wybranych komponentów Blockly na stronie, powinni używać funkcji fokusu w tym menedżerze.

Menedżer jest odpowiedzialny za obsługę zdarzeń związanych z ogniskiem z DOM (które mogą wynikać z kliknięć elementów strony przez użytkowników) i zapewnienie, że odpowiednie węzły IFocusableNode są wyraźnie oznaczone jako aktywnie lub pasywnie wyróżnione w taki sam sposób, w jaki byłoby to reprezentowane przez wywołania funkcji focusNode().

Podpis:

export declare class FocusManager 

Zespoły

Zespół Modyfikatory Opis
(constructor)(addGlobalEventListener) Tworzy nową instancję klasy FocusManager

Właściwości

Właściwość Modyfikatory Typ Opis
ACTIVE_FOCUS_NODE_CSS_CLASS_NAME

static

readonly

(nie zadeklarowano)

Klasa CSS przypisana do elementów IFocusableNode, które mają obecnie aktywny DOM i zaznaczenie Blockly.

Nie należy używać go bezpośrednio. Zamiast tego używaj klasy FocusManager, aby mieć pewność, że węzły mają aktywny fokus (automatycznie przez fokus DOM lub ręcznie za pomocą różnych metod focus* udostępnianych przez tę klasę).

Nie zalecamy też wysyłania zapytań z użyciem tej nazwy klasy. Zamiast tego użyj metod FocusableTreeTraverser lub IFocusableTree, aby znaleźć konkretny węzeł.

PASSIVE_FOCUS_NODE_CSS_CLASS_NAME

static

readonly

(nie zadeklarowano)

Klasa CSS przypisana do elementów IFocusableNode, które mają obecnie pasywny fokus (czyli były ostatnim węzłem w swoim względnym drzewie, który miał aktywny fokus – patrz ACTIVE_FOCUS_NODE_CSS_CLASS_NAME – i ponownie uzyskają aktywny fokus, jeśli ich otaczające drzewo zostanie poproszone o uzyskanie fokusu, np. za pomocą focusTree poniżej).

Więcej informacji o ograniczeniach związanych z bezpośrednim używaniem tej stałej znajdziesz w sekcji ACTIVE_FOCUS_NODE_CSS_CLASS_NAME (zwykle nie trzeba jej używać).

Metody

Metoda Modyfikatory Opis
ephemeralFocusTaken()
focusNode(focusableNode)

Ustawia fokus na określonym węźle DOM i oznacza go jako aktywnie wybranego.

Wcześniej zaznaczony węzeł zostanie zaktualizowany i będzie pasywnie wyróżniony (jeśli znajduje się w innym drzewie, na którym można ustawić fokus) lub rozmyty (jeśli znajduje się w tym samym drzewie).

**Ważne:** jeśli podany węzeł nie może być aktywny (np. jego metoda canBeFocused() zwraca wartość false), zostanie zignorowany, a dotychczasowy stan aktywności pozostanie bez zmian.

Pamiętaj, że może to zaktualizować atrybut tabindex określonego węzła, aby czytniki ekranu mogły go poprawnie odczytać po ustawieniu na nim fokusu.

focusTree(focusableTree)

Ustawia fokus na konkretnym obiekcie IFocusableTree. Oznacza to przywrócenie aktywnego fokusu na węzeł drzewa, który jest pasywnie zaznaczony, lub zaznaczenie węzła głównego drzewa.

Pamiętaj, że jeśli w określonym drzewie jest już zaznaczony węzeł, nie zmieni to istniejącego zaznaczenia (chyba że węzeł ma pasywne zaznaczenie, w którym to przypadku zostanie przywrócone aktywne zaznaczenie).

Więcej informacji o tym, jak ta zmiana wpływa na inne węzły, znajdziesz w artykule getFocusedNode.

getFocusedNode()

Zwraca bieżący węzeł IFocusableNode z ogniskiem (który jest zawsze powiązany z węzłem IFocusableTree z ogniskiem) lub wartość null, jeśli takiego węzła nie ma.

Pamiętaj, że ta funkcja zachowuje spójność z funkcją IFocusableTree.getFocusedNode(). Oznacza to, że jeśli drzewo samo w sobie ma fokus, ale żaden z jego elementów podrzędnych niebędących elementami głównymi nie ma fokusu, ta funkcja zwróci wartość null, ale funkcja getFocusedTree() nie.

Pamiętaj też, że jeśli fokus tymczasowy jest obecnie przechwycony (np. za pomocą funkcji takeEphemeralFocus), zwrócony węzeł może nie mieć obecnie fokusu DOM.

getFocusedTree()

Zwraca bieżący interfejs IFocusableTree, który ma fokus, lub wartość null, jeśli żaden z nich nie ma fokusu.

Pamiętaj też, że jeśli fokus tymczasowy jest obecnie przechwytywany (np. za pomocą funkcji takeEphemeralFocus), zwrócone drzewo może nie mieć obecnie fokusu DOM.

getFocusManager() static

Zwraca obiekt FocusManager dla całej strony.

Zwrócona instancja nie zmienia się w przypadku wywołań funkcji, ale może się zmieniać w przypadku wczytywania stron.

isRegistered(tree) Zwraca informację, czy określone drzewo zostało już zarejestrowane w tym menedżerze za pomocą funkcji registerTree i nie zostało jeszcze wyrejestrowane za pomocą funkcji unregisterTree.
registerTree(tree, rootShouldBeAutoTabbable)

Rejestruje nowy interfejs IFocusableTree do automatycznego zarządzania fokusem.

Jeśli drzewo zawiera obecnie element z ogniskiem DOM, nie będzie to miało wpływu na stan wewnętrzny tego menedżera, dopóki ognisko nie zostanie przeniesione na nowy, monitorowany obecnie element lub węzeł.

Ta funkcja zgłasza wyjątek, jeśli podane drzewo jest już zarejestrowane w tym menedżerze. Użyj funkcji isRegistered, aby sprawdzić, czy drzewo zostało zarejestrowane w przypadkach, w których nie można mieć pewności, czy tak się stało.

Rejestrację drzewa można dostosować, aby skonfigurować automatyczne tabulatory. Umożliwia to użytkownikowi przechodzenie za pomocą klawisza Tab do korzenia drzewa, ale tylko wtedy, gdy drzewo nie jest aktywne. Jeśli ta funkcja jest wyłączona, węzeł główny drzewa zostanie automatycznie ustawiony jako możliwy do zaznaczenia (ale nie do przejścia za pomocą klawisza Tab) przy pierwszym zaznaczeniu w taki sam sposób jak każdy inny węzeł, który można zaznaczyć.

takeEphemeralFocus(focusableElement)

Przejściowo ustawia fokus na określonym elemencie, dopóki nie zostanie wywołana zwrócona lambda. Powinno to być szczególnie przydatne w przypadku ulotnych przepływów interfejsu, takich jak okna dialogowe.

WAŻNE: zwrócona lambda *musi* zostać wywołana, w przeciwnym razie automatyczne ustawianie ostrości przestanie działać w dowolnym miejscu na stronie. Zdecydowanie zalecamy powiązanie wywołania funkcji lambda z zamknięciem odpowiedniego interfejsu, aby w przypadku ręcznej zmiany danych wejściowych na element znajdujący się poza tym interfejsem interfejs został zamknięty, a dane wejściowe automatycznie przywrócone. Pamiętaj, że ta funkcja lambda musi być wywoływana dokładnie raz, a kolejne wywołania spowodują błąd.

Menedżer będzie nadal śledzić sygnały wejściowe DOM, nawet gdy aktywne jest tymczasowe ustawianie fokusu, ale nie zmieni stanu węzła, dopóki nie zostanie wywołana zwrócona funkcja lambda. Ponadto w danym momencie może być aktywny tylko 1 kontekst tymczasowego skupienia (próba aktywowania więcej niż jednego jednocześnie spowoduje zgłoszenie błędu).

unregisterTree(tree)

Wyrejestrowuje element IFocusableTree z automatycznego zarządzania fokusem.

Jeśli drzewo miało wcześniej zaznaczony węzeł, jego wyróżnienie zostanie usunięte. Ta funkcja NIE zmienia fokusu DOM.

Ta funkcja zgłasza wyjątek, jeśli podane drzewo nie jest obecnie zarejestrowane w tym menedżerze.

Ta funkcja zresetuje indeks tabulacji elementu głównego drzewa, jeśli drzewo zostało zarejestrowane z automatycznym zarządzaniem tabulacją.