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 设备 API # eventdef-xrsession-squeeze |
WebXR 设备 API # dom-xrsession-onsqueeze |
浏览器兼容性
BCD 表格仅在浏览器中加载
另请参阅
squeezestart
和squeezeend
事件