TweenLineMax
TimelineMax是GreenSock 动画平台中的动画组织、排序、管理工具,可创建时间轴(timeline)作为动画或其他时间轴的容器,这使得整个动画控制和精确管理时间变得简单,避免了通过反复delay和回调进行动画。
创建TimelineMax
var tl = new TimelineLite();
创建实例时允许传入如下参数
delay: Number
时间轴动画开始之前的延迟秒数(或帧数)。restart()无视delay。paused: Boolean
如果设置为true,时间轴将在创建时立即暂停。默认falseuseFrames: Boolean
当设置为true时,这个时间轴的时间模式基于帧而不是秒,一般帧速约为16.66ms(60帧/秒)。tweens: Array 例:
var tm = new TimelineMax({tweens: [myTween, tl]});
将多个动画一起插入时间轴(TweenLite / TweenMax / TimelineLite / TimelineMax),这比使用add()要简洁。stagger: Number
仅与tweens属性一起使用。它将tweens内的动画错开了一定的秒数(或帧),默认值为0。align: String
仅与tweens属性一起使用,设置tweens内的动画的对齐方式,默认为"normal",每隔stagger播放下一个。"start"类似"normal",但会忽略delay。如为"sequence",则每一个播放完成后,等待stagger,然后播放下一个(仅对初始化时有效,播放过程中更改上一个动画持续时间,不会影响其后的动画)。autoRemoveChildren: Boolean
默认为false。若为true则子动画/时间轴完成时会被移除。smoothChildTiming: Boolean
默认为false。若为true则动态更改属性时自动保持平滑播放(而非直接跳到目标动画状态)。这些属性包括 reversed, timeScale, progress, totalProgress, time, totalTime, delay, pause, resume, duration, totalDurationrepeat: Number
动画在第一次完成后应重复的次数。-1则无限重复。repeatDelay: Number
每次repeat前的秒数(或帧)。yoyo: Boolean
默认为false。若为true则重复的动画将往返进行。callbackScope: Object
指定onStart,onUpdate,onComplete等回调中“this”的指向。
为TimelineMax添加TweenMax/TimelineMax实例
可通过add添加,或使用更简单的to()方法和链式调用使添加实例更加简洁
加入时间轴的实例会在上一个实例执行完成后开始执行
var tl = new TimelineMax(),tm = new TimelineMax();tl.to('.orange', 3, { x: 300, rotation: 360 }).to('.green', 1, {top:50});tm .add( tl );//将一个实例添加到时间轴tm .add( TweenLite.to(element, 1, {top:50}) );//将一个实例添加到时间轴末端,即与前一个实例接续
时间轴管理
.add( value:, position:, align:String, stagger:Number ) : *
向时间轴添加动画、其他时间轴、回调函数或标签(或它们的数组)。value 添加的动画、时间轴、回调函数或标签(或它们的数组)
position 添加的时间点,使用数字来表示以秒为单位的绝对时间(或基于帧的时间轴的帧),或使用"+="或"-="前缀来设置相对时间。例如,2表示时间轴2秒处,+=2表示时间轴末尾后2秒处。还可以使用标签,例如"myLabel+=2"表示标签myLabel后2秒处。留空则添加至时间轴末尾。如果位置标签不存在则添加至末尾。
align 序列方式,仅当value是数组时需要设置
stagger 序列时间间隔,仅当value是数组时需要设置
//将一个动画添加到时间轴的末尾 tl.add( TweenLite.to(element, 2, {left:100}) ); //将一个函数添加到1.5秒处 tl.add(func, 1.5); //将一个标签添加至时间轴结束后2秒 tl.add("myLabel", "+=2"); //将另一个时间轴添加至"myLabel"标签处 tl.add(otherTimeline, "myLabel"); //将一个动画数组添加至标签"myLabel"后2秒处 tl.add([tween1, tween2, tween3], "myLabel+=2"); //将一个动画数组添加至时间轴结尾后2秒处,每个动画都在前一个动画结束0.5秒后开始 tl.add([tween1, tween2, tween3], "+=2", "sequence", 0.5);
.addCallback( callback:Function, position:, params:Array, scope: ) : TimelineMax
在特定位置插入回调函数。params为回调入参
scope为回调中的this指向。
.removeCallBack( callback:Function, timeOrLabelName:* ) : TimelineMax
从特定位置移除回调函数。如果没有设置时间点或者标记,则移除所有该回调函数。.addLabel( labelName:String, position:* ) : *
在时间轴上添加一个标记,便于标记重要位置/时间。.removeLabel( label:String ) : *
从时间轴中删除标记。你也可以使用remove()方法来移除。.addPause( position:, callback:Function, params:Array, scope: ) : *
在时间轴上添加一个暂停点,并允许插入回调函数。.removePause( position:* ) : *
删除通过TimelineMax.addPause() 添加到时间轴的暂停点。.remove( value:* ) : *
从时间轴上移除一个动画、时间轴、函数或标签(或者他们的数组)。添加TweenMax实例方法
.to()
.from()
.fromTo()
.staggerTo()
.staggerFrom()
.staggerFromTo()
.set()
等同于.add()
方法,且支持链式调用。语法类似TweenMax的同名函数,区别仅在于入参最后允许多传一个position:*
,默认为"+=0"。
以下两行具有相同效果
myTimeline.add( TweenLite.to(element, 1, {left:100, opacity:0.5}),"myLabel+=2" );myTimeline.to(element, 1, {left:100, opacity:0.5},"myLabel+=2");
时间轴事件(以onStart为例,其余类似)
onStart: 当时间轴开始时执行的回调函数。
受到时间轴的delay影响,但不受时间轴内动画的delay影响。onStartParams: Array onStart回调函数的入参
onStartScope: Object onStart回调函数中this的指向
new TimelineMax({onStart: myFunction, onStartParams: ["param1"],onStartScope: Object});
onComplete: 在时间轴结束时触发此方法。
onReverseComplete: 时间轴反向播放完成时执行。
onUpdate: 当时间轴变化时(动画进行中的每一帧)不停的触发此函数。
onRepeat: 在每次时间轴重复播放时(repeat)执行。
时间轴播放控制方法
.play( from:Num/label, suppressEvents:Boolean ) : *
控制动画往正方向播放,可设定开始的时间点。 suppressEvents默认为true,不会触发新旧时间点之间设置的回调或函数。.pause( atTime:Num/label, suppressEvents:Boolean ) : *
暂停时间轴,可选择跳转到特定时间。.paused( value:Boolean ) : * 获取或设置动画的暂停状态
.restart( includeDelay:Boolean, suppressEvents:Boolean ) : *
重新开始动画/重头开始。includeDelay(false)表示是否包含delay.resume( from:Num/label, suppressEvents:Boolean ) : *
恢复播放而不改变方向(前进或后退),可选择首先跳到特定时间。.reverse( from:Num/label, suppressEvents:Boolean ) : *
控制动画反向播放。动画的各种表现都会反转,例如ease。对于from,如果从最动画最末端开始播放,设置为0。如果时间基于反方向,可以设置为负数。.reversed( value:Boolean ) : *
获取或设置动画的反转状态.seek( time:Num/label, suppressEvents:Boolean ) : *
不改变状态(播放、暂停、方向)的情况下直接跳转到某个时间点。.timeScale( value:Number ) : *
获取/设定动画速度,默认为1。
例如0.5为慢速,2为快速。
如果设置则返回此时间轴便于链式调用。如不设置则返回时间调节比例。.tweenTo( position:*, vars:Object ) : TweenLite
创建一个线性动画,将时间轴播放到特定时间或标签,然后停止。.tweenFromTo( fromPosition:, toPosition:, vars:Object ) : TweenLite
创建一个线性动画,将时间轴从某时间或标签播放到指定时间或标签,然后停止。要使TimelineMax播放到"myLabel2"标签,然后从"myLabel2"播放到开头(时间为0),只需执行以下操作:
var tl = new TimelineMax(); tl.add( myTimeline.tweenFromTo("myLabel1", "myLabel2") );tl.add( myTimeline.tweenFromTo("myLabel2", 0) );
时间轴(获取/修改)属性方法
.delay( value:Number ) : *
获取或者设置时间轴的开始延迟秒数(帧)。.repeat( value:Number ) : *
获取或设置时间轴在第一次完成后应该重复的次数。.repeatDelay( value:Number ) : *
获取或设置重复之间的秒数(或基于帧的时间轴的帧)的时间量。.duration( value:Number ) : *
获取或设置时间轴的持续时间。.totalDuration( value:Number ) : *
获取或设置总的时间轴持续时间.progress( value:Number, suppressEvents:Boolean ) : *
获取或者设置时间轴的进程,返回该时间轴以便链式调用。.totalProgress( value:Number, suppressEvents:Boolean ) : *
获取或设置总的时间轴进程.time( value:Number, suppressEvents:Boolean ) : *
获取或设置(类似seek)当前位置的时间点。.totalTime( time:Number, suppressEvents:Boolean ) : *
获取或设置当前位置在总的时间轴中的时间(包含repeat和repeatDelay等的时间).endTime( includeRepeats:Boolean ) : Number
获取时间轴的结束时间。.startTime( value:Number ) : *
获取或设置某个动画在其父时间轴上的起始时间.yoyo( value:Boolean ) : *
获取或设置时间轴的yoyo状态,其中true表示时间轴每次重复时交替来回播放。
时间轴对象属性
.autoRemoveChildren : Boolean
如果设置为true,则子动画/时间轴在完成时会被自动移除(默认为false,除了根时间轴)。.data : *
用于储存或者读取任何你想要的数据。.smoothChildTiming : Boolean
控制是否自动重新定位子动画/时间轴(更改其startTime),以便在动态更改属性时保持平滑播放。这些属性包括 reversed, timeScale, progress, totalProgress, time, totalTime, delay, pause, resume, duration, totalDuration 。.timeline : SimpleTimeline
获取父时间轴,所有的动画都依附于时间轴(默认是根时间轴),并只能有一个父时间轴
时间轴对象方法
.call( callback:Function, params:Array, scope:, position: ) : *
在时间轴的末尾(或position位置)增加一个回调函数。call与onComplete的区别在于,onComplete会在时间轴全部完成后触发,而call会在设定时的时间轴末端触发。.clear( labels:Boolean ) : *
清空时间轴的所有动画,时间轴和回调函数(以及标签)。不会清除事件回调(如onComplete, onUpdate, onStart等),如果你想清除可使用eventCallback()方法,如myTimeline.eventCallback("onComplete", null);。
返回self便于链式调用。.currentLabel( value:String ) : *
获取当前时间或之前最接近的label标记,或跳转到指定的label标记。
如跳转则返回self(便于链式调用)。.eventCallback( type:String, callback:Function, params:Array, scope:* ) : *
获取或设置一个事件,如“onComplete”,“onUpdate”,“onStart”,“onReverseComplete”或“onRepeat”(onRepeat仅适用于TweenMax或TimelineMax)以及应传递给该回调事件的任何参数。TimelineMax.exportRoot( vars:Object, omitDelayedCalls:Boolean ) : TimelineLite
将全部动画、时间轴、函数(可选)从根时间轴导出至新的时间轴便于执行一些高级操作,并且不影响导出后创建的动画/时间轴。.getActive( nested:Boolean, tweens:Boolean, timelines:Boolean ) : Array
返回时间轴中当前处于活动状态的动画/时间轴nested (default = true)结果是否包含子级
tweens (default = true)结果是否包含动画
timelines (default = false)结果是否包含子时间轴
.getChildren( nested:Boolean, tweens:Boolean, timelines:Boolean, ignoreBeforeTime:Number ) : Array
返回一个数组,其中包含嵌套在此时间轴中的所有动画和时间轴。ignoreBeforeTime (default = -9999999999)忽略此时间前的动画和时间轴
.getLabelAfter( time:Number ) : String
返回time参数后面的下一个标签(如果有)。可配合tweenTo()使时间轴动画至该标记。.getLabelBefore( time:Number ) : String
返回在time参数之前发生的上一个label标记(如果有)。 可配合tweenTo()使时间轴动画至该标记。.getLabelsArray( ) : Array
返回一个标记对象数组,按时间轴中出现的顺序排列,每个标记对象有“time”和“name”属性。.getLabelTime( label:String ) : Number
返回特定标记的时间位置。.getTweensOf( target:Object, nested:Boolean ) : Array
返回此时间轴内特定对象的动画(TweenLite和TweenMax)。.invalidate( ) : *
刷新任何内部记录的开始/结束值,如果您想要重新启动动画而不恢复到以前记录的任何起始值,这将非常有用。.invalidate( ) : *
刷新任何内部记录的开始/结束值。例如一个向右移动100的动画,如果restart
,则从原点重新运行。如果invalidate
再restart
,则在停留位置再移动100。.isActive( ) : Boolean
指示动画当前是否处于活动状态(意味着播放头在此实例的时间范围内正在活动,并且未暂停,也不是其任何祖先时间轴)。.kill( vars:Object, target:Object/Array ) : *
根据参数完全或部分kill时间轴。返回self便于链式调用。vars 需要清除的属性,如{x:true, y:true},属性值无关紧要,{x:false, y:false}也是相同效果。留空则清除全部属性
target 清除该目标元素的属性,如kill(null, [myObject1, myObject2])。留空则选择全部目标。
.recent( ) : Animation
返回最近添加的子动画/时间轴/回调函数,无论其在时间轴中的位置如何。.shiftChildren( amount:Number, adjustLabels:Boolean, ignoreBeforeTime:Number ) : *
将此时间轴的子项的开始时间(startTime)移动一定秒数或帧。当你想在某个点插入动画,将已存在的动画后移以腾出位置给新动画时,可以考虑使用此方法。amount 所有子项调整的秒数(或帧)
adjustLabels (default = false)是否同时调整label标记
ignoreBeforeTime 仅调整此时间点及其后的子项(default = 0)
.useFrames( ) : Boolean
如果为true,则时间线的计时模式是基于帧而不是秒。