# Kity 动画 API 设计 ## 简介 经过调研发现,SVG.js 和 Rapheal 都是直接使用脚本控制动画,而不是使用原生的动画标签。加上实现上的难度和维护的简易程度,以及后期拓展到不同底层的时候迁移的难度,决定使用脚本来进行动画控制。 主要由三个类来完成动画。Animator 进行动画定义,Timeline 进行动画控制,MotionAnimator 进行路径动画定义。 ## 基本用法 下面代码展示了如何使用动画。 ```js var a = new Animator(0, 100, function( target, value ) { target.setPositionX( value ); }); a.start(rect1, 1000, 'ease-in'); // or rect1.startAnimate( a, 1000, 'ease' ); a.start(rect2, 500, 'ease-out', 500); a.on('finish', function( e ) { console.log('the ' + e.target.getId() + ' has move right'); }); ``` ## 基础接口 ### new Animator( beginVal, finishVal, setter(target, val) ) 创建一个动画器,它产生从 beginVal 到 finishVal 变化的动画值。 beginVal, finishVal 支持三种数据类型的值:数值、颜色、点和变换矩阵 setter(target, val) 指定动画值的使用方法,该方法接受两个参数:动画对象(target)以及当前动画值(val)。 ### new Animator( animator1, animator2, ... ) 创建一个动画器,它组合了给定的动画器,会让指定的动画按顺序播放。 ### animator.start( target [, duration [, easing [, delay] [, callback] ] ] ) 在指定目标上创建动画时间线,并开始播放。 target 指定动画作用的目标对象。 duration 指定动画时长。如果为数字,则认为单位为 ms。如果为字符串,请指定单位(ms、s 或 min)。不指定将使用默认值 Animator.DEFUALT_DURATION(300)。 easing 指定动画的播放曲线,不指定则使用默认值 Animator.DEFAULT_EASING("linear") delay 指定动画延时,默认为 0。 return 返回动画的时间轴,用于对动画进行进一步控制 ### Animator.create( target [, duration [, easing ] ] ) 在指定目标上创建动画时间线,但先不开始播放。参数形式和意义和 start 方法一致,但是不包含 delay 参数的支持。 ### animator.on( 'finish', fn(e) ) 动画结束后的事件。对于每次调用 start 方法,都会产生一条时间线(Timeline)对象。只要 Timeline 对象播放结束,Animator 的 finish 事件会触发。 e.animateTarget 动画目标,和 start 方法中传入的目标一致 e.animateTimeline 和动画目标关联的 Timeline 对象 ### Timeline.getStatus() 获取时间轴当前状态,有以下值: playing 当前正在播放 paused 已暂停 stoped 已停止 finished 播放结束 ### Timeline.getAnimator() 获取产生该 Timeline 的 animator ### Timeline.pause() 暂停当前正在播放的动画。会让动画对象在当前值上暂停。 ### Timeline.stop() 停止当前正在播放的动画。会让动画对象结束在最终值上。 ### Timeline.play() play 方法的操作决定于时间线的状态: playing: 不做任何操作 paused: 继续播放动画 stoped: 重头开始播放动画 finished: 重头开始播放动画 ### Timeline.repeat( repeat, rollback ) 循环播放当前的动画 repeat 指定是否循环或循环的次数。指定为 true 则无限循环。 rollback 表示是否在循环之间插入回滚播放的动画 ### Timeline.on( 'play', fn(e) ) 时间线在变为播放时触发的事件。注意,如果时间线本来就在播放状态,play() 方法不会触发该事件。 e.target 动画目标 e.lastStatus <"paused"|"stoped"|"finished"> 动画播放之前的状态 ## 运动动画 ### new MotionAnimator(Path, setter(target, point)) 产生沿着指定 Path 运动的动画,setter 中接受 Point 作为坐标参数。 > *该功能需要图形方法:getPathPosition() var path = new Path('M0 0 C100 0 100 0 100 100') var m = new MotionAnimator(path, function(target, point) { target.setTransform(new Matrix().translate(point.x, point.y)); });