XRInputSourceEvent - 描述了在 WebXR 用户输入设备上发生的事件

安全上下文
该功能仅在部分或所有支持的浏览器中的安全上下文(HTTPS)中可用。

XRInputSourceEventWebXR 设备 API 的接口,描述了在 WebXR 用户输入设备(例如手控制器,注视跟踪系统或运动跟踪系统)上发生的事件。

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

构造函数

XRInputSourceEvent()

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

属性

frame 只读

一个 XRFrame 对象,提供有关事件发生期间事件框架的所需信息。该帧可能是过去渲染的,不是当前帧。因为这是一个事件框架,而不是动画框架,所以无法在其上调用 XRFramegetViewerPose() 方法,请使用 getPose()

inputSource 只读

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

方法

XRInputSourceEvent 接口没有定义任何方法;但是,从父接口 Event 继承了方法。

事件类型

select

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

selectend

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

selectstart

当输入源开始其主要操作时,发送到 XRSession,指示用户已开始命令类似的输入,例如按下触发器或按钮,发出语音命令,轻敲触摸板等。

squeeze

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

squeezeend

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

squeezestart

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

实例

下面的代码设置了主要动作事件的处理程序,以便确定用户何时在场景中点击(射击/戳向/任何)对象。

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

  if (targetRayPose) {
    let hit = myHitTest(targetRayPose.transform);
    if (hit) {
      /* 处理点击 */
    }
  }
});

规范

规范 状态 备注
WebXR Device API
XRInputSourceEvent 的定义
工作草案 初始定义。

桌面浏览器兼容性

特性ChromeEdgeFirefoxInternet ExplorerOperaSafari
基础支持7979 不支持 不支持 不支持 不支持
XRInputSourceEvent() 构造函数7979 不支持 不支持 不支持 不支持
frame7979 不支持 不支持 不支持 不支持
inputSource7979 不支持 不支持 不支持 不支持

移动浏览器兼容性

特性AndroidChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
基础支持 不支持79 未知 不支持 未知 不支持 不支持
XRInputSourceEvent() 构造函数 不支持79 未知 不支持 未知 不支持 不支持
frame 不支持79 未知 不支持 未知 不支持 不支持
inputSource 不支持79 未知 不支持 未知 不支持 不支持