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 vor der Verwendung auf produktiven Webseiten.
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 Quetsch-Aktion auf einer ihrer Eingabequellen beginnt.
Primäre Quetsch-Aktionen sind Aktionen, die 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
Zusätzlich zu den unten aufgeführten Eigenschaften sind die Eigenschaften der übergeordneten Schnittstelle, Event
, verfügbar.
frame
Schreibgeschützt-
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, anstatt ein aktueller Rahmen zu sein. Da dies ein Ereignis-Rahmen ist, kein Animations-Rahmen, können Sie nichtXRFrame.getViewerPose()
darauf aufrufen; stattdessen verwenden SiegetPose()
. inputSource
Schreibgeschützt-
Ein
XRInputSource
-Objekt, das anzeigt, welche Eingabequelle das Eingabeereignis erzeugt hat.
Beschreibung
Auslöser
Wird ausgelöst, wenn Benutzer beginnen, den Controller zu drücken, eine Handbewegung machen, die das Ergreifen von etwas nachahmt, oder einen Abzug (Trigger) drücken.
Anwendungsfälle
Das squeezestart
-Ereignis wird gesendet, um anzuzeigen, dass der Benutzer eine Quetsch-Aktion begonnen hat.
Wenn die primäre Quetsch-Aktion erfolgreich endet, wird der Sitzung ein squeeze
-Ereignis gesendet.
Ein squeezeend
-Ereignis wird gesendet, um anzuzeigen, dass die Quetsch-Aktion nicht mehr im Gange ist. Dies wird gesendet, unabhängig davon, ob die Quetsch-Aktion erfolgreich war oder nicht.
Beispiele
Das folgende Beispiel verwendet addEventListener()
, um Handler für die Quetsch-Ereignisse: squeezestart
, squeezeend
und squeeze
einzurichten. Dieses Snippet ist der Kern eines Ereignishandlers, 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, sodass sie bestimmten Code teilen können, der unabhängig davon der gleiche ist, welches der drei Ereignisse empfangen wird. Erst nachdem diese Aufgaben abgeschlossen sind, verteilt die onSqueezeEvent()
-Funktion unten die Aktion an eine spezialisierte Funktion, um Dinge zu handhaben.
Nachdem sichergestellt wurde, dass das empfangene Ereignis ein tracked-pointer
-Ereignis ist (die einzige Art, die wir hier behandeln), wird die Zielstrahlpose mit getPose()
abgerufen.
Wenn die Zielstrahlpose erfolgreich abgerufen wurde, verwendet der Code den Wert der Event
-Eigenschaft type
, um die Kontrolle an eine entsprechende Funktion zu übergeben, die das eingetroffene Ereignis behandelt:
- Bei
squeezestart
-Ereignissen wird einemyBeginTracking()
-Funktion mit dermatrix
der Zielstrahlpose aufgerufen. DiemyBeginTracking()
-Funktion würde vermutlich den Beginn des Objekt-Zieh-Prozesses darstellen, indem sie den Transformations-Hit-Test durchführt, um zu bestimmen, welches Objekt aufgenommen werden soll.myBeginTracking()
gibt ein Objekt zurück, das das Objekt darstellt, das der Benutzer zu ziehen begonnen hat. - Beim Empfangen eines
squeeze
-Ereignisses wird diemyDropObject()
-Funktion mit dem Zielobjekt und der aktuellen Zielstrahl-Pose-Transformation als Eingaben aufgerufen. Dies platziert das Objekt in seiner neuen Position in der Welt und löst alle Effekte aus, die sich ergeben könnten, wie das Planen einer Animation eines Spritzens, wenn es ins Wasser fallen gelassen wird, etc. - Das
squeezeend
-Ereignis führt dazu, dass einemyStopTracking()
-Funktion mit dem gezogenen Objekt und der endgültigen Zielstrahl-Pose-Transformation 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 |