XRSession: squeeze Ereignis

Limited availability

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

Experimentell: Dies ist eine experimentelle Technologie
Überprüfen Sie die Browser-Kompatibilitätstabelle sorgfältig, bevor Sie diese produktiv verwenden.

Sicherer Kontext: Diese Funktion ist nur in sicheren Kontexten (HTTPS) in einigen oder allen unterstützenden Browsern verfügbar.

Das WebXR squeeze Ereignis wird an eine XRSession gesendet, wenn eine der Eingabequellen der Sitzung eine primäre Squeeze-Aktion abgeschlossen hat. Beispiele für gängige Arten von primären Aktionen sind das Drücken von Triggern oder Tasten durch Benutzer, das Antippen eines Touchpads, das Aussprechen eines Befehls oder das Ausführen einer erkennbaren Geste bei der Verwendung eines Video-Tracking-Systems oder eines tragbaren Controllers mit einem Beschleunigungssensor.

Einzelheiten darüber, wie die Ereignisse squeezestart, squeeze und squeezeend funktionieren und wie Sie darauf reagieren sollten, finden Sie unter Eingaben und Eingabequellen.

Syntax

Verwenden Sie den Ereignisnamen in Methoden wie addEventListener() oder setzen Sie eine Ereignishandler-Eigenschaft.

js
addEventListener("squeeze", (event) => {});

onsqueeze = (event) => {};

Ereignistyp

Ereigniseigenschaften

Neben den unten aufgeführten Eigenschaften sind auch Eigenschaften der übergeordneten Schnittstelle Event verfügbar.

frame Nur lesbar

Ein XRFrame-Objekt, das die benötigten Informationen über den Ereignisrahmen bereitstellt, währenddessen das Ereignis aufgetreten ist. Dieser Frame könnte in der Vergangenheit gerendert worden sein und nicht der aktuelle Frame sein. Da dies ein Ereignis-Frame und kein Animations-Frame ist, können Sie nicht XRFrame.getViewerPose() darauf aufrufen; stattdessen verwenden Sie getPose().

inputSource Nur lesbar

Ein XRInputSource-Objekt, das angibt, welche Eingabequelle das Eingabeereignis generiert hat.

Beschreibung

Auslöser

Ausgelöst, wenn Benutzer den Controller drücken, eine Handbewegung machen, die das Greifen von etwas mimt, oder einen Trigger verwenden (drücken).

Anwendungsfälle

Das Ereignis squeezestart zeigt an, dass der Benutzer mit einer Squeeze-Aktion begonnen hat.

Wenn die primäre Squeeze-Aktion erfolgreich endet, wird eine squeeze-Ereignis an die Sitzung gesendet.

Ein squeezeend Ereignis wird gesendet, um anzuzeigen, dass die Squeeze-Aktion nicht mehr im Gange ist. Dies wird gesendet, unabhängig davon, ob die Squeeze-Aktion erfolgreich war oder nicht.

Beispiele

Das folgende Beispiel verwendet addEventListener(), um einen Handler für das squeeze-Ereignis einzurichten. Der Handler ruft die Pose ab, die den Zielstrahl für tracked-pointer Eingaben darstellt, und sendet die Transformation der Pose an eine Funktion namens myHandleSqueezeWithRay().

Dieser Code behandelt das Squeeze als eine Momentaufnahme, die nicht ein fortlaufendes Tracking einer Aktivität beinhaltet. Wenn Sie ein Squeeze verfolgen müssen, das nicht sofortig ist, hören Sie auf die Ereignisse squeezestart und squeezeend, um festzustellen, wann die Squeeze-Aktion beginnt und endet.

js
xrSession.addEventListener("squeeze", (event) => {
  if (event.inputSource.targetRayMode === "tracked-pointer") {
    let targetRayPose = event.frame.getPose(
      event.inputSource.targetRaySpace,
      myRefSpace,
    );
    if (targetRayPose) {
      myHandleSqueezeWithRay(targetRayPose.transform);
    }
  }
});

Sie können auch einen Handler für squeeze-Ereignisse einrichten, indem Sie die onsqueeze-Ereignishandlereigenschaft des XRSession-Objekts auf eine Funktion setzen, die das Ereignis behandelt:

js
xrSession.onsqueeze = (event) => {
  if (event.inputSource.targetRayMode === "tracked-pointer") {
    let targetRayPose = event.frame.getPose(
      event.inputSource.targetRaySpace,
      myRefSpace,
    );
    if (targetRayPose) {
      myHandleSqueezeWithRay(targetRayPose.transform);
    }
  }
};

Spezifikationen

Specification
WebXR Device API
# eventdef-xrsession-squeeze
WebXR Device API
# dom-xrsession-onsqueeze

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch