274 字
1 分钟
用 View Transitions API 给页面切换加动画

给客户的后台加页面切换动画,以前要么上 framer-motion,要么手写 opacity 加 transform。这次直接用 View Transitions API,零依赖,旧浏览器优雅降级成瞬间切换,没有任何报错。

多页应用的用法#

Chrome 126 起支持跨文档过渡,只要一行 CSS:

@view-transition {
navigation: auto;
}

列表页和详情页各自声明过渡名:

.item-image {
view-transition-name: item-image;
}

浏览器会自动截图新旧状态做交叉淡入淡出。想定制动画,覆盖两个伪元素:

::view-transition-old(item-image),
::view-transition-new(item-image) {
animation-duration: 0.25s;
}

单页应用#

SPA 里在改 DOM 前包一层:

document.startViewTransition(() => updateListUI());

浏览器对函数执行前后各截一帧,中间的过程自动补间。

几个坑#

  • view-transition-name 必须全页唯一,列表里循环渲染的元素不能共用一个名字,否则动画直接失效
  • 页面根元素默认有一个 root 过渡名,不想要整页淡入淡出就把它禁掉
  • Firefox 和 Safari 的跨文档过渡支持滞后,做好渐进增强的预期,别把核心交互押在动画上
用 View Transitions API 给页面切换加动画
https://oliver6868686.tech/posts/view-transitions/
作者
Oli
发布于
2026-07-10
许可协议
CC BY-NC-SA 4.0