ViewTransition:finished 属性

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

实验性: 这是一项实验性技术
在将其用于生产之前,请仔细检查浏览器兼容性表格

ViewTransition 接口的 finished 只读属性是一个 Promise。会在过渡动画完成(新的页面视图对用户可见且可交互)时兑现。

仅当传递给 document.startViewTransition() 的回调函数抛出异常或返回的 Promise 被拒绝时,finished 才会被拒绝,这表示页面的新状态未被创建。

如果过渡动画无法开始,或在动画期间使用 ViewTransition.skipTransition() 跳过了过渡动画,那么视图过渡依旧可以到达最终状态,因此 finished 依旧会被兑现。

一个 promise。

示例

不同的导航使用不同的过渡效果

有时,某些导航需要特定的过渡效果,例如后退导航可能与前进导航的过渡效果不同。处理这种情况的最佳实践是在 <html> 元素上设置一个类名以处理过渡(使用特定的选择器应用正确的动画),然后在过渡结束后删除该类名。

js
async function handleTransition() {
  if (isBackNavigation) {
    document.documentElement.classList.add("back-transition");
  }

  const transition = document.startViewTransition(() =>
    updateTheDOMSomehow(data),
  );

  try {
    await transition.finished;
  } finally {
    document.documentElement.classList.remove("back-transition");
  }
}

备注: isBackNavigation 不是内置特性;它是一个理论上存在的函数,可以使用 Navigation API 或类似的特性实现。

规范

Specification
CSS View Transitions Module Level 1
# dom-viewtransition-finished

浏览器兼容性

Report problems with this compatibility data on GitHub
desktopmobile
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
finished

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
No support
No support

参见