TweenMax中文初级教程二

2020-04-17 11:28:35

TweenLineMax

TimelineMax是GreenSock 动画平台中的动画组织、排序、管理工具,可创建时间轴(timeline)作为动画其他时间轴的容器,这使得整个动画控制和精确管理时间变得简单,避免了通过反复delay和回调进行动画。


创建TimelineMax

var tl = new TimelineLite();

创建实例时允许传入如下参数

  • delay: Number
    时间轴动画开始之前的延迟秒数(或帧数)。restart()无视delay。

  • paused: Boolean
    如果设置为true,时间轴将在创建时立即暂停。默认false

  • useFrames: 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, totalDuration

  • repeat: 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,则从原点重新运行。如果invalidaterestart,则在停留位置再移动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,则时间线的计时模式是基于帧而不是秒。




  • 2017-12-05 22:30:02

    php7.0升级php7.2

    看电脑上的教程要备份7.0配置文件以及扩展啥的,我感觉不如卸载干净重新安装

  • 2017-12-06 09:35:10

    分页优化的四种方式

    在大数据量的情况下,原本很简单的分页如果没有处理好,你会发现分页的请求会消耗你大量的数据库时间。如果你遇到了这个问题,文章给了你几个很好的解决的方案。当然,初学者若能看完这篇文章,那么它会指导你写出更具有扩展性的分页代码。