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(); // 重启动