svg动画属性详解
<set> - 设置svg元素动画属性
<animate> - 定义svg元素基础动画效果。实现单属性的动画过渡效果,移动、变形、变色等。类似Snap.svg的animate()方法支持的动画效果。
<animateTransform> - 定义svg元素动画3D效果,旋转、放大等,类似css3的transform。
<animateMotion> - 定义svg元素运动路径。
<path d="" opacity="1">
<set attributeName="d" to="" begin="1s" />
<animate attributeName="d" from="" to="" begin="1s" dur="3s" repeatCount="indefinite" />
<animateTransform />
<animateMotion />
</path>
动画属性:
attributeName = "name" //要变化的元素属性名称name
attributeType = "CSS | XML | auto" //要变化元素属性的类型,可省略
type //scale、transform
from //动画开始状态,可省略
to //动画到达状态值 - 绝对状态
by //动画到达状态值 - 相对状态
values //动画多个到达状态值 - "value1;value2…"字符串list
dur //一次动画持续时间,dur="8s",dur="indefinite"
repeatCount //动画执行重复次数,n | indefinite
repeatDur //定义动画重复的总时间,n | indefinite 与dur有区别
begin //动画开始标志,begin = value | offset-value | syncbase-value | event-value | repeat-value |
// accessKey-value | media-marker-value | wallclock-sync-value | "indefinite"
//begin可以设置多个时间值,"0s;5s;8s",单位可以为ms/s/m/h等,缺省单位为s
//offset-value:表示偏移值,数值前面有+或-。应该指相对于document的begin值而言。
//syncbase-value:基于同步确定的值。语法为:[a元素的id].begin/end +/- 时间值。
借用其他元素的
begin值再加减,这个可以准确实现多个独立元素的动画级联效果。
//event-value:某事件触发,如begin="btn.click",begin="mouseover",某按钮点击后开始
//repeat-value:某元素重复n次后执行开始,如begin="a.repeat(3)",在元素a执行3次后开始
//accessKey-value:某快捷键触发按下,如begin="accessKey(s)",按下键盘s键开始,火狐支持
//media-marker-value:某媒体元素状态触发??
//wallclock-sync-value:到达某时钟开始,如:1997-07-16T19:20:30.45+01:00
//"indefinite":无限循环
end //结束时间标志,如设置过小,会导致动画提前结束,可省略
fill //动画间隙的状态:freeze | remove,freeze保持至结束状态,remove移除并恢复至初始状态,默认remove
calcMode //控制动画速度变化,calcMode="discrete | linear | paced | spline";
//discrete-from值直接跳到to值;
//linear-匀速,默认值;
//paced-通过插值让动画的变化步调平稳均匀,仅支持线性数值区域内的值,keyTimes或keySplines值都会不生效;
//spline-插值定义贝塞尔曲线。spline点的定义在keyTimes属性中,每个时间间隔控制点由keySplines定义。
keyTimes //“value1;value2…”
跟上面提到的
<list>类似,都是分号分隔一组时间值。
keyTimes值的数目要和values一致,如果是from/to/by动画,keyTimes就必须有两个值。然后对于linear和spline动画,第一个数字要是0, 最后一个是1。
每个连续的时间值必须比它前面的值大或者相等。
keySplines //keySplines表示的是与keyTimes相关联的一组贝塞尔控制点(默认0 0 1 1)。
//每个控制点使用4个浮点值表示:x1 y1 x2 y2.
//只有模式是spline时候这个参数才有用,也是分号分隔,值范围0~1,总是比keyTimes少一个值。
accumulate //动画是否累积。accumulate="none | sum"。默认none,sum表示动画结束位置作为下次动画起始
additive //动画是否附加。additive="replace | sum"。默认replace,sum表示元素的动画基础定义会附加到其他低优先级的动画元素
restart //重启动画执行次数,restart="always | whenNotActive | never",默认always,
//always随时可重启一次,never不可重启,whenNotActive动画不活动时重启
min/max //表示动画执行最短和最长时间。支持参数为时间值和"media"(媒介元素有效), max还支持indefinite
animateTransform type:translate | scale | rotate | skewX | skewY
animateMotion <mpath xlink:href="#path1" />
动画暂停与播放
SVG animation中有内置的API,js控制: svg1.pauseAnimations(); // 暂停 svg1.unpauseAnimations(); // 重启动