XRSession:squeeze 事件
当会话的一个输入源完成了主要挤压操作时,WebXR squeeze 事件会被发送到 XRSession。常见的初级操作的例子包括用户按下扳机或按钮、触摸触控板、说出命令,或者在使用带有加速计的视频追踪系统或手持控制器时执行可识别的手势。
有关 squeezestart、squeeze 和 squeezeend 事件如何工作以及您应该如何响应它们的详细信息,请参阅 输入和输入源。
语法
在诸如 addEventListener() 之类的方法中使用事件名称,或设置事件处理程序属性。
addEventListener("squeeze", (event) => { })
onsqueeze = (event) => { }
事件类型
一个 XRInputSourceEvent。继承自 Event。
事件属性
除了下面列出的属性之外,父接口 Event 的属性也可使用。
frame只读-
一个
XRFrame对象,提供事件发生期间所需的事件帧信息。此帧可能是在过去渲染的,而不是当前的帧。因为这是一个事件帧,而不是动画帧,所以您不能在其上调用XRFrame.getViewerPose();而是使用getPose()。 inputSource只读-
一个
XRInputSource对象,指示是哪个输入源生成了此输入事件。
描述
触发
当用户挤压控制器、做出模仿抓取东西的手势或使用(挤压)扳机时触发。
用例
squeezestart 事件表示用户已开始挤压操作。
如果主要挤压操作成功结束,则会向会话发送 squeeze 事件。
发送 squeezeend 事件以指示挤压操作不再进行中。无论挤压操作是否成功,都会发送此事件。
示例
以下示例使用 addEventListener() 来设置 squeeze 事件的句柄。该句柄会获取代表 tracked-pointer 输入目标射线的姿势,并将姿势的变换发送到一个名为 myHandleSqueezeWithRay() 的函数。
此代码将挤压视为一个瞬时操作,不涉及追踪正在进行中的活动。如果您需要追踪非瞬时的挤压操作,请监听 squeezestart 和 squeezeend 事件,以感知挤压操作的开始和结束。
xrSession.addEventListener("squeeze", (event) => {
if (event.inputSource.targetRayMode === "tracked-pointer") {
let targetRayPose = event.frame.getPose(
event.inputSource.targetRaySpace,
myRefSpace,
);
if (targetRayPose) {
myHandleSqueezeWithRay(targetRayPose.transform);
}
}
});
您还可以通过将 XRSession 对象的 onsqueeze 事件句柄属性设置为处理该事件的函数来设置 squeeze 事件的句柄。
xrSession.onsqueeze = (event) => {
if (event.inputSource.targetRayMode === "tracked-pointer") {
let targetRayPose = event.frame.getPose(
event.inputSource.targetRaySpace,
myRefSpace,
);
if (targetRayPose) {
myHandleSqueezeWithRay(targetRayPose.transform);
}
}
};
规范
| 规范 |
|---|
| WebXR Device API # eventdef-xrsession-squeeze |
| WebXR Device API # dom-xrsession-onsqueeze |
浏览器兼容性
加载中…
另见
squeezestart和squeezeend事件