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

浏览器兼容性

另见