blockly > FocusManager

Klasse FocusManager

Ein Singleton pro Seite, das den Blockly-Fokus über einen oder mehrere IFocusableTrees hinweg verwaltet und diesen Fokus bidirektional mit dem DOM synchronisiert.

Anrufer, die den Eingabefokus für ausgewählte Blockly-Komponenten auf der Seite explizit ändern möchten, sollten die Fokusfunktionen in diesem Manager verwenden.

Der Manager ist dafür verantwortlich, Fokusereignisse aus dem DOM zu verarbeiten (die durch Nutzerklicks auf Seitenelemente ausgelöst werden können) und dafür zu sorgen, dass entsprechende IFocusableNodes klar als aktiv/passiv hervorgehoben werden, so wie es bei Aufrufen von focusNode() der Fall wäre.

Unterschrift:

export declare class FocusManager 

Konstruktoren

Konstruktor Modifikatoren Beschreibung
(constructor)(addGlobalEventListener) Erstellt eine neue Instanz der Klasse FocusManager.

Attribute

Attribut Modifikatoren Typ Beschreibung
ACTIVE_FOCUS_NODE_CSS_CLASS_NAME

static

readonly

(nicht deklariert)

Die CSS-Klasse, die IFocusableNode-Elementen zugewiesen wird, die derzeit aktiven DOM- und Blockly-Fokus haben.

Sollte niemals direkt verwendet werden. Verlassen Sie sich stattdessen auf FocusManager, um sicherzustellen, dass Knoten den aktiven Fokus haben (entweder automatisch über den DOM-Fokus oder manuell über die verschiedenen focus*-Methoden, die von dieser Klasse bereitgestellt werden).

Es wird auch nicht empfohlen, Abfragen mit diesem Klassennamen zu erstellen. Verwenden Sie stattdessen FocusableTreeTraverser oder die Methoden von IFocusableTree, um einen bestimmten Knoten zu finden.

PASSIVE_FOCUS_NODE_CSS_CLASS_NAME

static

readonly

(nicht deklariert)

Die CSS-Klasse, die IFocusableNode-Elementen zugewiesen wird, die derzeit passiven Fokus haben. Das heißt, sie waren der letzte Knoten in ihrem relativen Baum, der aktiven Fokus hatte (siehe ACTIVE_FOCUS_NODE_CSS_CLASS_NAME), und erhalten wieder aktiven Fokus, wenn ihr umgebender Baum fokussiert werden soll, z. B. mit focusTree.

Unter ACTIVE_FOCUS_NODE_CSS_CLASS_NAME finden Sie Hinweise und Einschränkungen zur direkten Verwendung dieser Konstante (im Allgemeinen sollte sie nie verwendet werden).

Methoden

Methode Modifikatoren Beschreibung
ephemeralFocusTaken()
focusNode(focusableNode)

Fokusiert die DOM-Eingabe auf den angegebenen Knoten und markiert ihn als aktiv fokussiert.

Alle zuvor fokussierten Knoten werden aktualisiert und entweder passiv hervorgehoben (wenn sie sich in einem anderen fokussierbaren Baum befinden) oder verschwommen dargestellt (wenn sie sich im selben Baum befinden).

**Wichtig**: Wenn der angegebene Knoten nicht fokussiert werden kann (z.B. wenn seine canBeFocused()-Methode „false“ zurückgibt), wird er ignoriert und der vorhandene Fokusstatus bleibt unverändert.

Dadurch kann sich der Tabindex des Elements des angegebenen Knotens ändern, damit er von Screenreadern richtig vorgelesen werden kann, wenn der Fokus darauf liegt.

focusTree(focusableTree)

Fokussiert den angegebenen IFocusableTree. Das bedeutet entweder, dass der aktive Fokus auf den passiv fokussierten Knoten des Baums zurückgesetzt wird, oder dass der Fokus auf den Stammknoten des Baums gesetzt wird.

Wenn der angegebene Baum bereits einen fokussierten Knoten hat, ändert sich der vorhandene Fokus nicht, es sei denn, der Knoten hat einen passiven Fokus. In diesem Fall wird er auf einen aktiven Fokus zurückgesetzt.

Weitere Informationen dazu, wie sich das auf andere Knoten auswirkt, finden Sie unter getFocusedNode.

getFocusedNode()

Gibt den aktuellen IFocusableNode mit Fokus zurück (der immer an einen fokussierten IFocusableTree gebunden ist) oder „null“, wenn keiner vorhanden ist.

Diese Funktion ist mit IFocusableTree.getFocusedNode() identisch. Wenn ein Baum selbst den Fokus hat, aber keines seiner untergeordneten Elemente, die nicht das Stammverzeichnis sind, wird „null“ zurückgegeben, aber getFocusedTree() nicht.

Wenn der flüchtige Fokus gerade erfasst wird (z.B. mit „takeEphemeralFocus“), hat der zurückgegebene Knoten möglicherweise keinen DOM-Fokus.

getFocusedTree()

Gibt den aktuellen IFocusableTree zurück, der den Fokus hat, oder null, wenn dies derzeit nicht der Fall ist.

Wenn der flüchtige Fokus gerade erfasst wird (z.B. mit „takeEphemeralFocus“), hat der zurückgegebene Baum möglicherweise keinen DOM-Fokus.

getFocusManager() static

Gibt den seitenweiten FocusManager zurück.

Die zurückgegebene Instanz ändert sich garantiert nicht bei Funktionsaufrufen, aber möglicherweise bei Seitenaufrufen.

isRegistered(tree) Gibt zurück, ob der angegebene Baum bereits mit „registerTree“ in diesem Manager registriert und noch nicht mit „unregisterTree“ abgemeldet wurde.
registerTree(tree, rootShouldBeAutoTabbable)

Registriert einen neuen IFocusableTree für die automatische Fokusverwaltung.

Wenn der Baum derzeit ein Element mit DOM-Fokus hat, wirkt sich das erst auf den internen Status in diesem Manager aus, wenn sich der Fokus auf ein neues, jetzt überwachtes Element/einen neuen Knoten ändert.

Diese Funktion löst einen Fehler aus, wenn der bereitgestellte Baum bereits in diesem Manager registriert ist. Verwenden Sie „isRegistered“, um in Fällen zu prüfen, in denen nicht sicher ist, ob der Baum registriert wurde.

Die Registrierung des Baums kann angepasst werden, um automatische Tabstopps zu konfigurieren. So kann der Nutzer mit der Tabulatortaste zum Stamm des Baums navigieren, aber nur, wenn der Baum nicht den aktiven Fokus hat. Wenn diese Funktion deaktiviert ist, wird der Stamm des Baums automatisch fokussierbar (aber nicht tabulierbar), wenn er zum ersten Mal fokussiert wird, genau wie jeder andere fokussierbare Knoten.

takeEphemeralFocus(focusableElement)

Fängt den Fokus für ein bestimmtes Element vorübergehend ab, bis das zurückgegebene Lambda aufgerufen wird. Das ist besonders für kurzlebige UI-Abläufe wie Dialogfelder nützlich.

WICHTIG: Die zurückgegebene Lambda-Funktion *muss* aufgerufen werden, da sonst der automatische Fokus nirgendwo auf der Seite mehr funktioniert. Es wird dringend empfohlen, den Lambda-Aufruf an das Schließen der entsprechenden Benutzeroberfläche zu binden. Wenn die Eingabe manuell in ein Element außerhalb der temporären Benutzeroberfläche geändert wird, sollte die Benutzeroberfläche geschlossen und die automatische Eingabe wiederhergestellt werden. Diese Lambda-Funktion darf nur einmal aufgerufen werden. Bei nachfolgenden Aufrufen wird ein Fehler ausgegeben.

Der Manager erfasst weiterhin DOM-Eingabesignale, auch wenn der ephemere Fokus aktiv ist. Der Knotenstatus wird jedoch erst geändert, wenn die zurückgegebene Lambda-Funktion aufgerufen wird. Außerdem kann jeweils nur ein temporärer Fokuskontext aktiv sein. Wenn Sie versuchen, mehrere gleichzeitig zu aktivieren, wird ein Fehler ausgegeben.

unregisterTree(tree)

Hebt die Registrierung eines IFocusableTree von der automatischen Fokusverwaltung auf.

Wenn der Baum zuvor einen fokussierten Knoten hatte, wird die Hervorhebung entfernt. Diese Funktion ändert den DOM-Fokus NICHT.

Diese Funktion löst einen Fehler aus, wenn der bereitgestellte Baum derzeit nicht in diesem Manager registriert ist.

Diese Funktion setzt den Tabindex des Stammelements des Baums zurück, wenn der Baum mit der automatischen Tabverwaltung registriert wurde.