XRSession: cancelAnimationFrame() 方法

可用性有限

此特性不是基線特性,因為它在一些最廣泛使用的瀏覽器中不起作用。

實驗性: 這是一項實驗性技術
在生產中使用此技術之前,請仔細檢查瀏覽器相容性表格

安全上下文: 此功能僅在安全上下文(HTTPS)中可用,且支援此功能的瀏覽器數量有限。

cancelAnimationFrame() 方法是 XRSession 介面的一部分,用於取消之前透過呼叫 requestAnimationFrame 請求的動畫幀。

語法

js
cancelAnimationFrame(handle)

引數

handle

之前呼叫 requestAnimationFrame() 來排程動畫回撥時返回的唯一值。

返回值

無(undefined)。

用法說明

如果找不到指定的 handle,則此函式無效。

示例

在下面的示例中,我們看到一段程式碼,如果支援沉浸式 VR 模式,則會啟動 WebXR 會話。啟動後,該會話將透過呼叫 requestAnimationFrame() 來安排渲染第一個幀。

底部顯示的 pauseXR() 函式可以透過取消任何待處理的動畫幀回撥來暫停 WebVR 會話。由於每個幀回撥都會排程下一個回撥,因此移除回撥會終止 WebXR 場景的更新。

js
const XR = navigator.xr;

let requestHandle = null;
let xrSession = null;

if (XR) {
  XR.isSessionSupported("immersive-vr").then((isSupported) => {
    if (isSupported) {
      startXR();
    }
  });
}

function frameCallback(time, xrFrame) {
  xrSession.requestAnimationFrame(frameCallback);

  // Update and render the frame
}

async function startXR() {
  xrSession = XR.requestSession("immersive-vr");

  if (xrSession) {
    stopButton.onclick = stopXR;
    requestHandle = xrSession.requestAnimationFrame(frameCallback);
  }
}

function pauseXR() {
  if (xrSession && requestHandle) {
    xrSession.cancelAnimationFrame(requestHandle);
    requestHandle = null;
  }
}

規範

規範
WebXR Device API
# dom-xrsession-cancelanimationframe

瀏覽器相容性

另見