XRSession: cancelAnimationFrame() 方法

实验性: 这是一个 实验性技术
在生产环境中使用之前,请仔细查看 浏览器兼容性表

安全上下文: 此功能仅在 安全上下文 (HTTPS) 中可用,在部分或所有 支持的浏览器 中可用。

cancelAnimationFrame() 方法是 XRSession 接口的方法,用于取消之前通过调用 requestAnimationFrame 请求的动画帧。

语法

js
cancelAnimationFrame(handle)

参数

handle

由先前调度动画回调的 requestAnimationFrame() 调用返回的唯一值。

返回值

无 (undefined).

使用说明

如果找不到指定的 handle,则此函数无效。

示例

在下面的示例中,我们看到了启动 WebXR 会话的代码(如果支持沉浸式 VR 模式)。会话启动后,会话会通过调用 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 设备 API
# dom-xrsession-cancelanimationframe

浏览器兼容性

BCD 表仅在启用 JavaScript 的浏览器中加载。

另请参见