XRSession: squeezestart-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-Ereignis squeezestart
wird an eine XRSession
gesendet, wenn der Benutzer eine primäre Quetschaktion an einer ihrer Eingabequellen beginnt.
Primäre Quetschaktionen sind Aktionen, die das Greifen oder Quetschen mit den Händen darstellen sollen und können mit Triggern auf Handcontrollern simuliert werden.
Syntax
Verwenden Sie den Ereignisnamen in Methoden wie addEventListener()
oder setzen Sie eine Ereignis-Handler-Eigenschaft.
addEventListener("squeezestart", (event) => {});
onsqueezestart = (event) => {};
Ereignistyp
Ein XRInputSourceEvent
. Erbt von Event
.
Ereigniseigenschaften
Neben den unten aufgeführten Eigenschaften sind auch Eigenschaften der Elternschnittstelle Event
verfügbar.
frame
Nur lesbar-
Ein
XRFrame
-Objekt, das die benötigten Informationen über den Ereignisrahmen bereitstellt, während dessen das Ereignis aufgetreten ist. Dieser Rahmen könnte in der Vergangenheit gerendert worden sein und ist nicht zwingend ein aktueller Rahmen. Da es sich um einen Ereignis-Rahmen handelt und nicht um einen Animations-Rahmen, kannXRFrame.getViewerPose()
nicht darauf aufgerufen werden; nutzen Sie stattdessengetPose()
. inputSource
Nur lesbar-
Ein
XRInputSource
-Objekt, das angibt, welche Eingabequelle das Eingabeereignis erzeugt hat.
Beschreibung
Auslöser
Wird ausgelöst, wenn Benutzer anfangen, den Controller zu drücken, eine Handbewegung zu machen, die das Greifen von etwas imitiert, oder einen Trigger zu betätigen.
Anwendungsfälle
Das squeezestart
-Ereignis wird gesendet, um anzuzeigen, dass der Benutzer eine Quetschaktion begonnen hat.
Wenn die primäre Quetschaktion erfolgreich abgeschlossen wird, erhält die Sitzung ein squeeze
-Ereignis.
Ein squeezeend
-Ereignis wird gesendet, um anzuzeigen, dass die Quetschaktion nicht mehr läuft. Dies wird unabhängig davon gesendet, ob die Quetschaktion erfolgreich war oder nicht.
Beispiele
Das folgende Beispiel verwendet addEventListener()
, um Handler für die Quetschereignisse einzurichten: squeezestart
, squeezeend
und squeeze
. Dieses Snippet bildet den Kern eines Ereignis-Handlers, der es dem Benutzer ermöglicht, Objekte in der Szene zu greifen und zu bewegen.
In diesem Fall wird eine einzelne Funktion verwendet, um alle drei Ereignisse zu behandeln, wodurch sie bestimmten Code teilen können, der unabhängig davon identisch ist, welches der drei Ereignisse empfangen wird. Erst nach Abschluss dieser Aufgaben leitet die Funktion onSqueezeEvent()
die Aktion an eine spezialisierte Funktion weiter, um die Dinge zu handhaben.
Nach der Überprüfung, dass das empfangene Ereignis ein tracked-pointer
-Ereignis ist (die einzige Art, die wir hier behandeln), wird die Pose des Zielstrahls mit getPose()
ermittelt.
Wenn die Zielstrahlpose erfolgreich abgerufen wurde, verwendet der Code den Wert der type
-Eigenschaft des Event
, um die Steuerung an eine geeignete Funktion zur Behandlung des eingetroffenen Ereignisses zu übergeben:
- Für
squeezestart
-Ereignisse wird einemyBeginTracking()
-Funktion mit dermatrix
der Zielstrahlpose aufgerufen. Die FunktionmyBeginTracking()
würde vermutlich den Prozess des Objektziehens starten, indem der Transformator zum Durchführen eines Hit-Tests verwendet wird, um zu bestimmen, welches Objekt aufgehoben wird.myBeginTracking()
gibt ein Objekt zurück, das das Objekt repräsentiert, das der Benutzer zu ziehen begonnen hat. - Beim Empfang eines
squeeze
-Ereignisses wird die FunktionmyDropObject()
mit dem Zielobjekt und dem aktuellen Transformator der Zielstrahlpose aufgerufen. Dies platziert das Objekt in seiner neuen Position in der Welt und löst mögliche Effekte aus, wie das Planen einer Animation eines Spritzers, falls es ins Wasser fällt, usw. - Das
squeezeend
-Ereignis führt dazu, dass einemyStopTracking()
-Funktion mit dem sich in der Bewegung befindlichen Objekt und dem finalen Transformator der Zielstrahlpose aufgerufen wird.
xrSession.addEventListener("squeezestart", onSqueezeEvent);
xrSession.addEventListener("squeeze", onSqueezeEvent);
xrSession.addEventListener("squeezeend", onSqueezeEvent);
function onSqueezeEvent(event) {
let source = event.inputSource;
let targetObj = null;
if (source.targetRayMode !== "tracked-pointer") {
return;
}
let targetRayPose = event.frame.getPose(source.targetRaySpace, myRefSpace);
if (!targetRayPose) {
return;
}
switch (event.type) {
case "squeezestart":
targetObj = myBeginTracking(targetRayPose.matrix);
break;
case "squeeze":
myDropObject(targetObj, targetRayPose.matrix);
break;
case "squeezeend":
myStopTracking(targetObj, targetRayPose.matrix);
break;
}
}
Sie können auch einen Handler für diese Ereignisse einrichten, indem Sie die Ereignis-Handler-Eigenschaften des XRSession
-Objekts auf eine Funktion setzen, die das Ereignis behandelt:
xrSession.onsqueezestart = onSqueezeEvent;
xrSession.onsqueeze = onSqueezeEvent;
xrSession.onsqueezeend = onSqueezeEvent;
Spezifikationen
Specification |
---|
WebXR Device API # eventdef-xrsession-squeezestart |
WebXR Device API # dom-xrsession-onsqueezestart |
Browser-Kompatibilität
BCD tables only load in the browser