解析 ECharts 设计:UniversalTransition 动画
· 阅读需 12 分钟
最后更新于 2023-11-11 21:56:00
ECharts 的 UniversalTransition 动画提供了一些复杂场景下过渡动画的解决方案,这类场景的难点在于让不规则图形或者不同形状的图形之间如何完成一个比较流畅的过渡动画,在业内比较熟知的类似技术则是 SVG Morph 动画。
查看以下 ECharts 官方示例:
SVG Morph 动画
在探究 ECharts 的 UniversalTransition 动画之前先来看看比较成熟的 SVG Morph 技术。
CSS 方案
通常,动画会优先采用 CSS 方案,一方面是因为方便,另一方面则是因为会有硬件加速的优势。实际上,SVG 的 Morph 动画也可以使用 CSS 来实现。查看以下示例:
<svg viewBox="0 0 10 10" class="svg-1">
<path d="M2,2 L8,8" />
</svg>
.svg-1:hover path {
d: path("M8,2 L2,8");
}
<path>
标签的 d
属性是一个 Presentation Attributes,所以可被用来作为 CSS 属性使用。不过,目前浏览器的支持度 仅有 70% 多,兼容性并不高。
SMIL 方案
实际上,在 CSS 支持的更早之前,业内采用 SMIL 技术来实现 Web 上的矢量图形形变动画。来自 MDN 文档的示例如下:
<svg viewBox="0 0 10 10" xmlns="http://www.w3.org/2000/svg">
<rect width="10" height="10">
<animate
attributeName="rx"
values="0;5;0"
dur="10s"
repeatCount="indefinite" />
</rect>
</svg>
可见,其实际上是类似 HTML 标签的形式,所以在应对一些高度复杂的动画场景时局限性比较大。
给出一个实际案例,状态管理库 jotai 的官方 GitHub 仓库 logo 动画的源文件:
https://raw.githubusercontent.com/pmndrs/jotai/master/img/title.svg