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 |
瀏覽器相容性
載入中…