Element: requestPointerLock()-Methode

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

Die requestPointerLock()-Methode des Element-Interfaces ermöglicht es Ihnen, asynchron anzufragen, dass der Zeiger auf das gegebene Element gesperrt wird.

Um den Erfolg oder Misserfolg der Anfrage zu verfolgen, ist es notwendig, die pointerlockchange- und pointerlockerror-Events auf der Ebene des Document zu überwachen.

Hinweis: In der aktuellen Spezifikation kommuniziert requestPointerLock() den Erfolg oder Misserfolg der Anfrage nur durch das Auslösen von pointerlockchange- oder pointerlockerror-Events. Ein vorgeschlagenes Update für die Spezifikation aktualisiert requestPointerLock() so, dass es ein Promise zurückgibt, welches Erfolg oder Misserfolg kommuniziert. Diese Seite dokumentiert die Version, die ein Promise zurückgibt. Beachten Sie jedoch, dass diese Version noch kein Standard ist und nicht von allen Browsern implementiert wird. Siehe Browser-Kompatibilität für weitere Informationen.

Syntax

js
requestPointerLock()
requestPointerLock(options)

Parameter

options Optional

Ein Optionsobjekt, das die folgenden Eigenschaften enthalten kann:

unadjustedMovement Optional

Deaktiviert die Betriebssystem-basierte Anpassung für Mausbeschleunigung und greift stattdessen auf rohe Mauseingaben zu. Der Standardwert ist false; das Setzen auf true deaktiviert die Mausbeschleunigung.

Rückgabewert

Ein Promise, das mit undefined aufgelöst wird.

Sicherheit

Eine transiente Aktivierung ist erforderlich, wenn requestPointerLock() aufgerufen wird. Der Benutzer muss mit der Seite oder einem UI-Element interagieren, damit diese Funktion funktioniert. Auch muss das zugehörige Dokument des Zielobjekts im aktiven Zustand sein.

Wenn requestPointerLock() unmittelbar nach dem Freigeben der Zeiger-Sperre durch die Standard-Entsperr-Geste (anstatt durch einen exitPointerLock()-Aufruf) aufgerufen wird, wird der Aufruf fehlschlagen, auch wenn eine transiente Aktivierung verfügbar ist.

Wenn requestPointerLock() zusammen mit requestFullscreen() aufgerufen wird, muss requestPointerLock() zuerst aufgerufen werden, da die requestFullscreen() den Zustand der transienten Aktivierung verbrauchen wird.

Das allow-pointer-lock Sandbox-Token muss hinzugefügt werden, wenn requestPointerLock() in einem <iframe>-Element aufgerufen wird. Auch dürfen keine anderen Elemente in anderen <iframe>-Elementen im Zeiger-Sperrzustand sein.

Beispiele

Die Zeiger-Sperre wird häufig in Online-Spielen verwendet, wenn Sie möchten, dass Ihre Mausbewegungen sich auf die Steuerung des Spiels konzentrieren, ohne dass der Mauszeiger sich bewegt, aus dem Spielbereich herausgeht oder den Rand des Fensters erreicht.

Um die Zeiger-Sperre zu aktivieren, würden Sie den Benutzer dazu bringen, mit der Benutzeroberfläche auf irgendeine Weise zu interagieren, vielleicht durch Drücken eines Buttons oder auf die Spielfläche selbst zu klicken.

js
canvas.addEventListener("click", async () => {
  await canvas.requestPointerLock();
});

Betriebssysteme aktivieren standardmäßig Mausbeschleunigung, was nützlich ist, wenn Sie manchmal langsame präzise Bewegungen wünschen (denken Sie daran, wie Sie vielleicht ein Grafikprogramm verwenden), aber auch große Distanzen mit einer schnelleren Mausbewegung zurücklegen wollen (denken Sie an das Scrollen und Auswählen mehrerer Dateien). Für einige Spiele aus der Ich-Perspektive wird jedoch auf rohe Mauseingabedaten zur Steuerung der Kameradrehung zurückgegriffen — wo die gleiche Bewegung, ob schnell oder langsam, die gleiche Rotation ergibt. Dies führt laut professionellen Spielern zu einem besseren Spielerlebnis und einer höheren Genauigkeit.

Um die Betriebssystem-basierte Mausbeschleunigung zu deaktivieren und auf rohe Mauseingaben zuzugreifen, können Sie das unadjustedMovement auf true setzen:

js
canvas.addEventListener("click", async () => {
  await canvas.requestPointerLock({
    unadjustedMovement: true,
  });
});

Für mehr Beispielcode siehe:

Spezifikationen

Specification
Pointer Lock 2.0
# dom-element-requestpointerlock

Browser-Kompatibilität

Siehe auch