XRSystem
WebXR 设备 API接口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();
});
}
}
此代码首先检查 WebXR 是否可用,方法是查找navigator.xr
属性。如果找到它,我们就知道 WebXR 存在,因此我们继续为用户可以单击以切换沉浸式 VR 模式开/关的按钮建立一个处理程序。
但是,我们还不知道所需的沉浸式模式是否可用。为了确定这一点,我们在启用按钮immersiveButton
之前调用isSessionSupported()
,将所需的会话选项传递给它,用户只有在沉浸式 VR 模式可用时才能使用该按钮切换到沉浸式模式。如果沉浸式 VR 不可用,则禁用该按钮以防止其使用。
onButtonClicked()
函数检查是否有正在运行的会话。如果没有,我们使用requestSession()
启动一个会话,并且一旦返回的 Promise 解析,我们就调用一个函数onSessionStarted()
来设置我们的会话以进行渲染等等。
另一方面,如果已经存在正在进行的 XR 会话,我们改为调用end()
以结束当前会话。当当前会话结束时,会发送end
事件,因此在其处理程序中将xrSession
设置为null
以记录我们不再拥有正在进行的会话的事实。这样,如果用户再次单击按钮,将启动一个新的会话。
规范
规范 |
---|
WebXR 设备 API # xrsystem-interface |
浏览器兼容性
BCD 表仅在启用 JavaScript 的浏览器中加载。