XRInputSourceEvent - 描述了在 WebXR 用户输入设备上发生的事件
XRInputSourceEvent
是 WebXR 设备 API 的接口,描述了在 WebXR 用户输入设备(例如手控制器,注视跟踪系统或运动跟踪系统)上发生的事件。
要了解有关在 WebXR 项目中处理输入的更多信息,请参见文章输入和输入源。
构造函数
XRInputSourceEvent()
创建并返回一个新的 XRInputSourceEvent
对象,该对象的属性与提供的 eventInitDict
字典中提供的属性匹配。
属性
frame
只读
一个 XRFrame
对象,提供有关事件发生期间事件框架的所需信息。该帧可能是过去渲染的,不是当前帧。因为这是一个事件框架,而不是动画框架,所以无法在其上调用 XRFrame
的 getViewerPose()
方法,请使用 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 的定义 |
工作草案 | 初始定义。 |
桌面浏览器兼容性
特性 | Chrome | Edge | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
基础支持 | 79 | 79 | 不支持 | 不支持 | 不支持 | 不支持 |
XRInputSourceEvent() 构造函数 | 79 | 79 | 不支持 | 不支持 | 不支持 | 不支持 |
frame | 79 | 79 | 不支持 | 不支持 | 不支持 | 不支持 |
inputSource | 79 | 79 | 不支持 | 不支持 | 不支持 | 不支持 |
移动浏览器兼容性
特性 | Android | Chrome for Android | Edge mobile | Firefox for Android | IE mobile | Opera Android | iOS Safari |
---|---|---|---|---|---|---|---|
基础支持 | 不支持 | 79 | 未知 | 不支持 | 未知 | 不支持 | 不支持 |
XRInputSourceEvent() 构造函数 | 不支持 | 79 | 未知 | 不支持 | 未知 | 不支持 | 不支持 |
frame | 不支持 | 79 | 未知 | 不支持 | 未知 | 不支持 | 不支持 |
inputSource | 不支持 | 79 | 未知 | 不支持 | 未知 | 不支持 | 不支持 |