XRSession: select 事件
当会话的一个输入源完成了 主要操作 时,WebXR select 事件会发送给 XRSession。
在 beforexrselect 事件触发后,会引发此事件,并且可以阻止此事件被触发。
语法
在诸如 addEventListener() 之类的方法中使用事件名称,或设置事件处理程序属性。
addEventListener("select", (event) => { })
onselect = (event) => { }
事件类型
一个 XRInputSourceEvent。继承自 Event。
事件属性
除了下面列出的属性之外,父接口 Event 的属性也可使用。
frame只读-
一个
XRFrame对象,提供事件发生期间所需的事件帧信息。此帧可能是在过去渲染的,而不是当前的帧。因为这是一个事件帧,而不是动画帧,所以您不能在其上调用XRFrame.getViewerPose();而是使用getPose()。 inputSource只读-
一个
XRInputSource对象,指示是哪个输入源生成了此输入事件。
描述
触发
当用户按下触发器或按钮、轻触触摸板、说出命令或在使用视频跟踪系统或带加速度计的手持控制器时执行可识别的手势时,会触发此事件。
用例
selectstart 和 selectend 事件会告知您何时可能需要向用户显示一些内容,以指示主要操作正在进行。这可能包括用新颜色绘制带有激活按钮的控制器,或者在 `selectstart` 到达时开始、在 `selectend` 收到时停止显示被抓取和移动的目标对象。
select 事件会告知您的代码用户已完成一项操作。这可能很简单,比如在游戏中扔一个物体或扣动枪的扳机,或者像将拖动的物体放置在新位置一样复杂。
如果您的主要操作是一个简单的触发器操作,并且您在触发器接合期间不需要为任何内容设置动画,您可以忽略 selectstart 和 selectend 事件,并在开始事件上执行操作。
示例
以下示例使用 addEventListener() 来设置 `select` 事件的事件处理程序。该处理程序获取代表 `tracked-pointer` 输入的目标射线(ray)的姿态,并将姿态的变换发送到一个名为 `myHandleSelectWithRay()` 的函数。
xrSession.addEventListener("select", (event) => {
if (event.inputSource.targetRayMode === "tracked-pointer") {
let targetRayPose = event.frame.getPose(
event.inputSource.targetRaySpace,
myRefSpace,
);
if (targetRayPose) {
myHandleSelectWithRay(targetRayPose.transform);
}
}
});
您也可以通过将 XRSession 对象的 `onselect` 事件处理程序属性设置为处理该事件的函数来设置 `select` 事件的处理程序。
xrSession.onselect = (event) => {
if (event.inputSource.targetRayMode === "tracked-pointer") {
let targetRayPose = event.frame.getPose(
event.inputSource.targetRaySpace,
myRefSpace,
);
if (targetRayPose) {
myHandleSelectWithRay(targetRayPose.transform);
}
}
};
规范
| 规范 |
|---|
| WebXR Device API # eventdef-xrsession-select |
| WebXR Device API # dom-xrsession-onselect |
浏览器兼容性
加载中…