XRSession: select 事件
当会话的输入源之一完成 主要操作时,WebXR 的 选择
事件将发送到 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
输入的目标射线的姿势,并将姿势的变换发送到名为 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 设备 API # eventdef-xrsession-select |
WebXR 设备 API # dom-xrsession-onselect |
浏览器兼容性
BCD 表格仅在浏览器中加载