SVG学习(四)

7 阅读3分钟

利用svg.js制作动画比较简单,主要使用animate()函数,例如

rect.animate().attr({ fill: '#f03' })

这就是一个会改变颜色的动画,如果多个animate()串联在一起,那就是有多个步骤的动画

rect.animate().attr({ fill: '#f03' }).animate().dmove(50, 50)

animate函数接受一个函数,包括以下属性

duration代表动画持续时间, 默认是400ms

delay代表动画延迟多少时间开始执行, 默认是0

when代表要在什么时候执行动画,它的值是‘now’, 表示动画立即执行,多个动画步骤的话,表现形式就是一起同时触发,‘after’或者‘last’表示上一个动画执行完毕后再执行,这也是它的默认值,‘absolute’和‘start'表示所有动画都处于时间轴的0点处,‘relative’表示起点固定到旧的开始时间,表现形式上会始得delay失效。

swing和times配合使用,swing表示是否要往返执行,times则指执行次数,

 wait表示每次执行的间隔时间是多少

此外,animate()函数会返回一个runner的对象,其中有多个属性

runner.element() // 返回或设置运行器绑定的元素 

runner.timeline() // 返回或设置运行器将被/正在安排的时间线 

runner.animate() // 用于动画链式操作。参见 element.animate() 

runner.schedule(timeline, delay, when) // 在时间线上安排运行器。如果已经设置,可以跳过时间线 

runner.unschedule() // 从时间线上移除运行器 

runner.loop(times, swing, wait) // 使动画循环 `times` 次,每次循环之间间隔 `wait` 毫秒 runner.queue(runOnceFn, runOnEveryStepFn) // 让你能够链接函数,这些函数不一定是动画 

runner.during(fn) // 让你能够将一个函数绑定到每个动画步骤 

runner.after(fn) // 让你能够绑定一个在动画结束后执行的函数 

runner.time() // 返回或设置运行器时间 

runner.duration() // 返回运行器运行的持续时间 

runner.loops() // 让你跳转到运行器的特定迭代次数,例如 3.5 表示第四次循环进行到一半 runner.persist() // 使这个运行器永远(true)或在特定时间内保持在时间线上。通常运行器在执行后会被删除以清理内存。 

runner.position() // 返回或设置运行器的当前位置,忽略等待时间(介于 0 和 1 之间) runner.progress() // 返回或设置运行器的当前位置,包括等待时间(介于 0 和 1 之间) runner.step(dt) // 根据一定时间(手动逐步浏览动画)来逐步运行运行器

runner.reset() // 将运行器重置为零时间,并重置所有动画 

runner.finish() // 将运行器步骤到完成状态 

runner.reverse() // 反向执行运行器 

runner.ease() // 改变动画的缓动效果 ,它的值有‘<>’ 淡入淡出,'<'淡入,‘>’淡出,‘-’线性,beziere(x1, y1, x2, y2)  贝塞尔曲线,step(steps, stepPosition)  有关步长的函数

runner.active() // 返回或设置运行器的活动状态。非活动运行器不会被执行

此外还可以创建一个时间线timeline,通过绑定动画的方式来控制,例如下面的例子

const runner = rect.animate().attr({ fill: '#f03' })    
const ruuner2 = rect.animate().dmove(50, 50)    
const tl = new Timeline()    
tl.stop()    
tl.schedule(runner)    
tl.schedule(ruuner2)    
rect.mouseover(function () {        
    tl.play()    
})

在这个例子中动画被创建出来但不会立即执行,通过stop()函数让动画停止,在鼠标进入后才会执行

除此timeline还有time执行时间,speed执行速度,reverse反转等方法

更多详细信息可以查看svgjs.dev/docs/3.2/an…