一个loading-更规范的svg动画
使用SVG的animate元素实现SVG动画
书接上文,SVG本身有规范的animate等动画元素实现动画。先从这里开始 animate-SVG | MDN
对于这个方案,我也有一个实践,如下图
其源码如下
1 | <svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="200" height="200"> |
简单解析以下
先交代几个公有属性
- from:属性在动画起点的值,相当于css动画的from。
- to:属性在动画终点的值,相当于css动画的to。
- by:指定动画的偏移值,起始值需由
from
指定。 - values:动画使用的值列表,使用分号分隔每一个值。一旦
values
被设置,则from
、to
、by
都将失效。 - dur:标识了动画的简单持续时间,其值应符合 Clock-value 或者是
indefinite
。简单地,类似1s
表示持续一秒。如不指定此值,则默认持续时间无限长,此时插值不能起作用。 - repeatCount:标识动画发生的次数,指定
indefinite
表示不断重复。 - calcMode:指定动画的插值计算方式。可选值
discrete
|linear
|paced
|spline
。discrete
表示动画在内容的单个值之间跃动。比如内容是字符串时,则会在字符间跃动而不是平滑地补间。linear
表示在values
指定的值之间线性地平滑地插值,对字符串不起作用,会自动转为discrete
(对于其他使用calcMode
的非animateMotion
元素来说,此值是默认值)。paced
表示线性地平滑地插值。 这仅支持可以定义线性数值范围的值,并且可以计算点之间的“距离”的一些属性(例如position、width、height等)。 与linear
不同的是,如果指定了paced
,则keyTimes
或keySplines
都将被忽略。此值对于animateMotion
元素来说是默认值。spline
定义插值为三次贝塞斯曲线,计算values
列表中两点之间的插值算法,曲线的样条点在keyTimes
属性中定义,区间控制点在keySplines
属性中定义。
- keyPoints:指定动画的关键点(百分比),取值为[0-1],值之间使用分号分隔。对应
keyTimes
中的每一个值,表示在该点时动画已持续的时间。 - keyTimes:表示用于控制动画节奏的时间值列表,取值为[0-1],值之间使用分号分隔。每个时间对应
values
中的一个值。
animate
- attributeName:标识需要需要变化的属性名,如
d
,fill
等。 - attributeType:标识
attributeName
所属的命名空间,可选值CSS
|XML
|auto
。CSS
说明attributeName
的属性是一个CSS属性。- 同理
XML
说明attributeName
是一个XML属性名。
animateTransform
指定目标元素上的一个变形属性。,允许动画控制转换、缩放、旋转和斜切。
- type:决定那些随时间变化的值的转换的类型,可选值为
translate
|scale
|rotate
|skewX
|skewY
animateMotion
定义了一个元素如何沿着运动路径进行移动。
- path:路径信息的数组。值同SVG中path元素的
d
属性。 - rotate:标识执行路径动画的元素如何旋转。可选值
auto
|auto-reverse
|<number>
。auto
表示元素会在移动的同时自动旋转以使自身相对与前进方向的角度不变。auto-reverse
则与auto
行为相似,只是元素始终与auto
时的角度相差180°。- 如果是一个数字,则元素始终保持一个固定的角度移动。默认为
0
。
参考
- 对于那些看着values里一大堆数字就头疼但是又希望搞懂的朋友,path元素 d属性
- SVG 动画元素参考
- SVG 属性参考
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Mosu!
评论
ArtalkGitalk