XRSystem
XRSystem
接口提供的方法可让您访问代表 WebXR 会话的 XRSession
对象。获得该 XRSession
后,您可以使用它与增强现实 (AR) 或虚拟现实 (VR) 设备进行交互。
实例属性
虽然 XRSystem
本身不提供任何属性,但它会继承其父接口 EventTarget
的属性。
实例方法
除了继承其父接口 EventTarget
的方法外,XRSystem
接口还包括以下方法:
isSessionSupported()
实验性-
返回一个 Promise,如果浏览器支持给定的会话模式,则解析为
true
。如果不支持指定的模式,则解析为false
。 requestSession()
实验性-
返回一个 Promise,该 Promise 会解析为具有指定会话模式的新
XRSession
。
事件
devicechange
实验性-
在可用的 XR 设备集合发生变化时发送。也可通过
ondevicechange
事件处理程序使用。
用法说明
此接口在规范的早期版本中称为 XR
;如果您在代码或文档中看到对 XR
的引用,请将其替换为 XRSystem
。
示例
以下示例演示了如何同时使用 isSessionSupported()
和 requestSession()
。
if (navigator.xr) {
immersiveButton.addEventListener("click", onButtonClicked);
navigator.xr.isSessionSupported("immersive-vr").then((isSupported) => {
immersiveButton.disabled = !isSupported;
});
}
function onButtonClicked() {
if (!xrSession) {
navigator.xr.requestSession("immersive-vr").then((session) => {
// onSessionStarted() not shown for reasons of brevity and clarity.
onSessionStarted(session);
});
} else {
// Shut down the already running XRSession
xrSession.end().then(() => {
// Since there are cases where the end event is not sent, call the handler here as well.
onSessionEnded();
});
}
}
此代码首先通过查找 navigator.xr
属性来检查 WebXR 是否可用。如果找到,则表示 WebXR 存在,然后我们继续为用户可以点击以开启和关闭沉浸式 VR 模式的按钮建立一个处理程序。
但是,我们还不知道所需的沉浸式模式是否可用。要确定这一点,我们调用 isSessionSupported()
,并将所需的会话选项传递给它,然后再启用 immersiveButton
按钮,用户只有在沉浸式 VR 模式可用时才能使用该按钮切换到沉浸式模式。如果沉浸式 VR 不可用,则禁用该按钮以防止使用。
onButtonClicked()
函数会检查是否已有会话正在运行。如果没有,我们使用 requestSession()
来启动一个会话,一旦返回的 Promise 解析,我们就调用 onSessionStarted()
函数来设置我们的会话以进行渲染等操作。
另一方面,如果已经有一个正在进行的 XR 会话,我们则调用 end()
来结束当前会话。当当前会话结束时,会发送 end
事件,因此在其处理程序中将 xrSession
设置为 null
以记录我们不再有正在进行的会话的事实。这样,如果用户再次点击按钮,就会启动一个新的会话。
规范
规范 |
---|
WebXR Device API # xrsystem-interface |
浏览器兼容性
加载中…