XRInputSourceEvent

可用性有限

此特性不是基线特性,因为它在一些最广泛使用的浏览器中不起作用。

安全上下文: 此功能仅在安全上下文(HTTPS)中可用,且支持此功能的浏览器数量有限。

WebXR Device APIXRInputSourceEvent 接口描述了在 WebXR 用户输入设备(例如手柄、注视跟踪系统或运动跟踪系统)上发生的事件。更具体地说,它们代表了 XRInputSource 状态的变化。

要了解更多关于在 WebXR 项目中处理输入的信息,请参阅文章 输入和输入源

Event XRInputSourceEvent

构造函数

XRInputSourceEvent()

创建并返回一个新的 XRInputSourceEvent 对象,其属性与提供的 eventInitDict 字典中的属性匹配。

实例属性

frame 只读

一个 XRFrame 对象,提供有关事件发生帧的必要信息。此帧可能是在过去渲染的,而不是当前帧。因为这是一个事件帧,而不是动画帧,所以您不能在其上调用 XRFrame 方法 getViewerPose();而是使用 getPose()

inputSource 只读

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

实例方法

XRInputSourceEvent 接口不定义任何方法;但是,有几个方法是从父接口 Event 继承而来的。

事件类型

select

当发送输入源完全完成一项 主要操作时,发送到 XRSession

selectend

当正在进行的主要操作结束,或者当具有正在进行的主要操作的输入源与系统断开连接时,发送到 XRSession

selectstart

当输入源开始其 主要操作时,发送到 XRSession,表示用户已开始一项命令式输入,例如按下扳机或按钮、发出语音命令、轻触触摸板等。

squeeze

当发送输入源完全完成一项 主要挤压操作时,发送到 XRSession

squeezeend

当正在进行的 主要挤压操作结束,或者当具有正在进行的挤压操作的输入源断开连接时,发送到 XRSession

squeezestart

当输入源开始其 主要挤压操作时,发送到 XRSession,表示用户已开始抓取、挤压或握住控制器。

示例

以下代码设置了主要操作事件的事件处理器,以便在用户单击(射击/点击/等)场景中的对象时确定。

js
xrSession.addEventListener("select", (event) => {
  let targetRayPose = event.frame.getPose(
    event.inputSource.targetRaySpace,
    myRefSpace,
  );

  if (targetRayPose) {
    let hit = myHitTest(targetRayPose.transform);
    if (hit) {
      /* handle the hit */
    }
  }
});

规范

规范
WebXR Device API
# xrinputsourceevent-interface

浏览器兼容性