XRSession: select 事件

实验性:这是一个 实验性技术
在生产环境中使用之前,请仔细查看 浏览器兼容性表

安全上下文:此功能仅在 安全上下文(HTTPS)中可用,在一些或所有 支持的浏览器中可用。

当会话的输入源之一完成 主要操作时,WebXR 的 选择 事件将发送到 XRSession

beforexrselect 在此事件之前触发,可以阻止此事件被触发。

语法

在像 addEventListener() 这样的方法中使用事件名称,或者设置事件处理程序属性。

js
addEventListener("select", (event) => {});

onselect = (event) => {};

事件类型

事件属性

除了下面列出的属性之外,父接口 Event 的属性也可以使用。

frame 只读

一个 XRFrame 对象,提供有关事件发生期间的事件帧所需的信息。此帧可能已在过去渲染,而不是当前帧。因为这是一个事件帧,而不是一个动画帧,所以你不能在它上面调用 XRFrame.getViewerPose();而是使用 getPose()

inputSource 只读

一个 XRInputSource 对象,指示哪个输入源生成了输入事件。

描述

触发

当用户按下触发器或按钮、点击触摸板、说出命令或在使用具有加速度计的视频跟踪系统或手持控制器时执行可识别的姿势时触发。

用例

selectstartselectend 事件告诉您何时可能需要向用户显示某些内容,表明主要操作正在进行。这可能是以新的颜色绘制控制器并激活按钮,或者显示被抓取并移动的目标对象,从 selectstart 到达开始,到收到 selectend 时停止。

select 事件告诉您的代码用户已完成操作。这可能与在游戏中扔一个物体或拉动枪的扳机一样简单,或者与将拖动的物体放置在新位置一样复杂。

如果您的主要操作是简单的触发操作,并且您不需要在触发器处于激活状态时进行动画处理,则可以忽略 selectstartselectend 事件,并根据开始事件进行操作。

示例

以下示例使用 addEventListener()select 事件设置处理程序。处理程序获取表示 tracked-pointer 输入的目标射线的姿势,并将姿势的变换发送到名为 myHandleSelectWithRay() 的函数。

js
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 事件的处理程序。

js
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 表格仅在浏览器中加载

另请参阅