View Transitions API
View Transitions API 提供了创建视图过渡的功能
目前该 API 仅支持在单 Document 中的视图过渡,尚未支持跨 Document 的视图过渡
视图过渡进程
- 调用
Document
接口上的startViewTransition()
方法 - 截取当前 DOM 的截图以作为视图过渡前的 old 状态
- 暂停 DOM 的渲染
updateCallback
回调函数参数,若提供的话会被调用ViewTransition
接口的updateCallbackDone
属性对应的 Promise 兑现- 截取当前 DOM 的截图以作为视图过渡后的 new 状态
- 创建各视图过渡伪元素
- 重启 DOM 的渲染以渲染各视图过渡伪元素
ViewTransition
接口的ready
属性对应的 Promise 兑现- 各视图过渡伪元素开始执行动画直至结束
- 移除各视图过渡伪元素
ViewTransition
接口的finished
属性对应的 Promise 兑现
视图过渡结构
通常情况下,视图过渡有关的伪元素的结构如下所示
1 | ::view-transition |
可以通过指定 view-transition-name
属性来应用给定的动画
1 | figcaption { |
此时视图过渡有关的伪元素的结构如下所示
1 | ::view-transition |
API 相关
Document
接口的 startViewTransition()
方法用于创建视图过渡
方法接收一个可选的 updateCallback
回调函数参数,该回调函数允许返回一个 Promise
方法返回一个 ViewTransition
实例
ViewTransition
接口反映了一个视图过渡
ViewTransition
接口的 finished
属性返回一个 Promise,在视图过渡完成并且视图过渡伪元素完全移除时兑现,若 updateCallback
回调函数返回的 Promise 拒绝时拒绝
ViewTransition
接口的 ready
属性返回一个 Promise,在视图过渡伪元素完成创建并且视图过渡将要开始时兑现,若 updateCallback
回调函数返回的 Promise 拒绝时或出现重复 view-transition-name
名称时拒绝
ViewTransition
接口的 updateCallbackDone
属性返回一个 Promise,在 updateCallback
回调函数返回的 Promise 兑现时兑现,拒绝时拒绝
ViewTransition
接口的 skipTransition()
方法可用于忽略执行视图过渡,但不会忽略执行传入的 updateCallback
回调函数参数
CSS 相关
view-transition-name
属性指定为 none
以使当前元素不应用视图过渡
该属性的值在整个文档中必须唯一,不同元素不能拥有相同的值,否则视图过渡会被忽略
::view-transition
伪元素选择器作为视图过渡遮蔽层的根元素,包含其他视图过渡组(包含多个 ::view-transition-group
伪元素)
::view-transition-group
伪元素选择器表示单个视图过渡组,可以接收 *
root
或一个视图过渡组名称(包含单个 ::view-transition-image-pair
伪元素)
::view-transition-image-pair
伪元素选择器代表单个视图过渡的视图截图容器,允许值同上
::view-transition-new
伪元素选择器代表单个视图过渡新的视图截图,允许值同上
::view-transition-old
伪元素选择器代表单个视图过渡旧的视图截图,允许值同上
示例
类型
1 | interface Document { |
链接
View Transitions API
https://skyclouds2001.github.io/2023/12/06/View-Transitions-API/