2.TweenLite

TweenLite算是Gsap中的基本最小单位。

一个TweenLite随着时间的推移可以控制多个对象的多个属性值的 渐变。

它可以配合 TimelineLite 或者 TimelineMax 完成复杂的任务。

基础用法

先来看个例子

html:

<div id="demo">
  <div id="scoreDisplay"></div>
</div>


css:

#demo {

}

#scoreDisplay {
  font-size:40px;
  text-align:center;
}

js:

var demo = {score:0},
    scoreDisplay = document.getElementById("scoreDisplay");

//create a tween that changes the value of the score property of the demo object from 0 to 100 over the course of 20 seconds.
var tween = TweenLite.to(demo, 20, {score:100, onUpdate:showScore})

//each time the tween updates this function will be called.
function showScore() {
  scoreDisplay.innerHTML = demo.score.toFixed(2);
}

点这里看演示效果

参数详解

先来看一个例子:

var photo = document.getElementById("photo");
TweenLite.to(photo, 2, {width:"200px", height:"150px"});

首先我们要知道gsap中tween是一种基本类型。

通过to()方法我们可以给TweenLite等类型传参。

这个的效果就是将以photo为ID的元素的图片,将从此刻起,两秒内。宽度和高度分别达到指定的数值。

来看下效果

imgn

代码在这

可以看到我一开始定义的高宽都是40px,它会自动创建动画补间最后达到指定的高宽。

有to()就有from().感兴趣的可以直接修改to为from。效果将相反。

如果你想处理更多的css属性,你可能需要用到插件[css Plugin](http://greensock.com/docs/#/HTML5/GSAP/Plugins/CSSPlugin/)。

关于这个我们未来会讨论。

默认我们是自动通过document.querySelectorAll() 和 document.getElementById()来确定元素。

当TweenLite 和 CSSPlugin 被加载,你可以写这种形式:

//tween the element with ID of "myID"
TweenLite.to("#myID", 2, {backgroundColor:"#ff0000", width:"50%", top:"100px", ease:Power2.easeInOut});

//or if jQuery is loaded, you can do more advanced selecting like all the elements with the class "myClass" like this:
TweenLite.to(".myClass", 2, {boxShadow:"0px 0px 20px red", color:"#FC0"});

你不用纠结怎么加载处理cssPlugin,只需要像普通加载外置js一样,直接在tweenlite后面加载就行了。

可以看到如果我们修改了上面的代码,那么效果将是这样的:

imgn

示例代码

从这几个例子中我们可以看到tween都是立刻执行的。我们可以通过特定的属性delay延迟执行或者paused 来暂停。

target可以是多个。来看下面的例子:

html:

<div id="photo"> </div>
<div id="photo2"> </div>
<div id="photo3"> </div>


css:

#photo{
height:40px;
width:40px;

    background:url(http://7s1say.com1.z0.glb.clouddn.com/avatar639D58E2-E732-4FF9-8E05-724717DFEF1F.png);
background-repeat:no-repeat;
background-size: contain;
}
#photo2{
height:40px;
width:40px;

    background:url(http://7s1say.com1.z0.glb.clouddn.com/avatar639D58E2-E732-4FF9-8E05-724717DFEF1F.png);
background-repeat:no-repeat;
background-size: contain;
}
#photo3{
height:40px;
width:40px;

    background:url(http://7s1say.com1.z0.glb.clouddn.com/avatar639D58E2-E732-4FF9-8E05-724717DFEF1F.png);
background-repeat:no-repeat;
background-size: contain;
}

js:

var photo = document.getElementById("photo");
var photo2 = document.getElementById("photo2");
var photo3 = document.getElementById("photo3");
TweenLite.to([photo, photo2, photo3], 1, {opacity:0.5, rotation:45});

这是效果:

imgn

更多语法

你可以用下面的方式调用tween

var tween = new TweenLite(element, 2, {width:200, height:150});
var tween = TweenLite.to(element, 2, {width:200, height:150});

特殊属性ease,callback(无需插件)

delay:接受数值n,表示n秒后执行动画

ease:接受函数或者字符串,可以控制动画速率。类似贝塞尔曲线。比如Elastic.easeOut

或者Strong.easeInOut.

你可以用gsap自带的

Linear, Power0, Power1, Power2, Power3, Power4, Quad, Cubic, Quart, Quint, Strong

它们可以分别用在.easeIn, .easeOut, .easeInOut

然后你还可以通过加载EasePack来获得额外的效果,比如:

Elastic, Back, Bounce, SlowMo, SteppedEase, Circ, Expo, Sine

对于线性动画,你可以定义ease通过Linear.easeNone这个字符串。或者是jquery风格easeOutStrong.

默认值是:Quad.easeOut

paused:接受boolean值,如果是true,当动画创建时会立刻停止。

immediateRender:接受boolean值,通常来说,当你创建一个tween,它会开始渲染下一帧除非你定义了paused

如果你想强制tween创建时就立刻渲染完成,你需要设置这个属性为true.或者为了防止from()立刻渲染,设置这个属性为false。默认的,from()这个属性是为true的。

overwrire:接受数值或者字符串。控制对于同个目标多个tweens是否覆盖。

默认是auto 这是它的参数表

字符串名 代表数值 含义
none(false) 0 当触发时不覆盖
all(true) 1 对于同一个目标立刻覆盖所有tween,即使这些tween没有开始或者它们之间的补间没有冲突。
auto 2 当tween开始渲染时,它会自动分析当前运行的tween并对于重复/冲突的补间单独覆盖。
concurrent 3 当tween开始渲染时,它会杀死当前其他非活动的tweens,不管它们是不是冲突的,就像autoall的混合,适合单个tween控制目标动画。
allOnStart 4 类似all,但是等待重写逻辑直到tween开始,杀死同一目标的tweens, 不管它们是不是冲突
preexisting 5 当tween开始渲染时,杀死之前存在过的tween,不管它被安排在什么时候开始。举个例子,当你创建了一个延迟10m的tween,然后你又创建了一个相同tween延迟2秒执行,后者会覆盖之前的。

onComplete:接受一个函数。当动画已经准备完全时调用。

onCompleteParams:接受一个数组。通过onComplete传递参数。用法如下

weenLite.to(element, 1, {left:"100px", onComplete:myFunction, onCompleteParams:[element, "param2"]});

还可以自我引用

onCompleteParams:["{self}", "param2"]

onCompleteScope:接受一个对象。定义onComplete函数的范围

onReverseComplete:接受一个函数。当reverse()被调用,它会被调用。也用在 TimelineLite 和 TimelineMax

onReverseCompleteParams:接受一个数组。通过onReverseComplete传参。用法如下:

TweenLite.to(element, 1, {left:"100px", onReverseComplete:myFunction, onReverseCompleteParams:[mc, "param2"]});

引用自身

onReverseCompleteParams:["{self}", "param2"]

onReverseCompleteScope:接受一个对象。定义onReverseComplete函数的范围

onStart:接受一个函数。当一个tween开始启动时调用。

onStartParams:接受一个数组。通过onStart传参.用法如下:

TweenLite.to(element, 1, {left:"100px", delay:1, onStart:myFunction, onStartParams:[mc, "param2"]});

引用自身

onStartParams:["{self}", "param2"]

onStartScope:接受一个对象。定义onStart函数的范围

onUpdate:接受一个函数。每当动画更新(每一帧活动时)调用。

onUpdateParams

TweenLite.to(element, 1, {left:"100px", onUpdate:myFunction, onUpdateParams:[mc, "param2"]});
onUpdateParams:["{self}", "param2"]

onUpdateScope:接受一个对象。定义onUpdate函数的范围

useFrames:接受一个boolean,如果为true,该tween定时将基于帧而不是秒。这将导致durationdelay都基于帧。

lazy:接受一个boolean,当一个tween第一次创建和读取它的值,GSAP将自动lazy render。这意味它将会尽量延迟渲染(写值)直到尽头。事实上你不需要动这个参数。

onOverwrite:接受一个函数。当一个tween被另一个tween覆盖。下列参数会被传到这个函数中:

1.overwrittenTween 要覆盖的tween

2.overwritingTween 被覆盖的tween

3.target 目标

4.overwrittenProperties 数组

autoCss:接受一个Boolean,让你可以用cssPlugins用下面的方式:

TweenLite.to(element, 2, {css:{left:"200px", top:"100px"}, ease:Linear.easeNone});

或者这种

TweenLite.to(element, 2, {left:"200px", top:"100px", ease:Linear.easeNone});).

不需要动它。

插件

每一个插件都有对应的属性名,

比如cssPlugins与css联系在一起。

注意

1.传递值时如果用了+=或者-=会联系当前值修改。比如

当你用

TweenLite.to(element, 2, {left:"-=20px"});

再用{x:"+=20"} 会自动添加20.

2.你可以改变TweenLite.defaultEase如果你想要用其它比如Power1.easeOut

3.干掉一个指定目标你可用TweenLite.killTweensOf("#myID")

4.你可以干掉自定义的delay 函数。 TweenLite.killDelayedCallsTo(myFunction)或者 TweenLite.killTweensOf(myFunction)

总结属性表。

公共属性

名字 作用
data : * 一个地方你想要存任何数据
TweenLite.defaultEase:Ease 可以用其他ease曲线来代替
TweenLite.defaultOverwrite : String = "auto" 改变覆盖方式
TweenLite.onOverwrite : Function 任何tween被覆盖时调用
TweenLite.selector : * = document.getElementById() 可用原生可用jq。
target : Object 目标
TweenLite.ticker : Object 这个对象将分配tick事件每当引擎update时,你可以添加你自己的lisener来运行自定义逻辑(适合游戏开发者)
timeline : SimpleTimeline (只读)父的timeline
vars : Object 存放onComplete, onUpdate等的配置变量然后传递给构造器。

公共函数

名字 作用
delay ( value:Number ) : * 延迟函数
TweenLite.delayedCall ( delay:Number, callback:Function, params:Array , scope:*, useFrames:Boolean ) : TweenLite 提供一种简单的方式过几帧或几秒来调用函数
duration ( value:Number ) : * 获取或者设置动画时长,不包括任何repeat
endTime ( includeRepeats:Boolean ) : Number 返回在父时间轴中结束的时间
eventCallback ( type:String, callback:Function, params:Array, scope: ) : 给"onComplete", "onUpdate", "onStart", "onReverseComplete" , "onRepeat" 获取或者设置回调(onRepeat 只应用在 TweenMax 或者 TimelineMax 实例)
TweenLite.from ( target:Object, duration:Number, vars:Object ) : TweenLite 看示例
TweenLite.fromTo ( target:Object, duration:Number, fromVars:Object, toVars:Object ) : TweenLite 看示例
TweenLite.getTweensOf ( target:*, onlyActive:Boolean ) : Array 1:9 返回指定目标的所有tweens
invalidate ( ) : * 清楚所有初始化数据。你重新开始补间并且恢复最初状态。
isActive ( ) : Boolean 确定当前动画是否处于活动状态。
kill ( vars:Object, target:Object ) : * 取决于参数判断是否干掉目标
TweenLite.killDelayedCallsTo ( func:Function ) : 立刻杀死所有delay调用函数
TweenLite.killTweensOf ( target:Object, onlyActive:Boolean, vars:Object ) : 干掉指定目标的tween
TweenLite.lagSmoothing ( threshold:Number, adjustedLag:Number ) : 觉得没啥用
pause ( atTime:, suppressEvents:Boolean ) : 暂停实例,可选跳到一个指定的时间
paused ( value:Boolean ) : * 获得或设置暂停状态
play ( from:, suppressEvents:Boolean ) : 开始播放,可选一个自定义时间开始
progress ( value:Number, suppressEvents:Boolean ) : * 设置或者获取动画播放进程,0表示开始,0.5中间,1结束。
TweenLite.render ( ) : 强制渲染所有活动补间
restart ( includeDelay:Boolean, suppressEvents:Boolean ) : * 重头再来
resume ( from:, suppressEvents:Boolean ) : 恢复播放,可跳到指定时间
reverse ( from:, suppressEvents:Boolean ) : 反向播放
reversed ( value:Boolean ) : * 获取或者设置反向播放状态
seek ( time:, suppressEvents:Boolean ) : 跳到一个指定时间,但不会影响实例
TweenLite.set ( target:Object, vars:Object ) : TweenLite 设置目标属性
startTime ( value:Number ) : * 获取或者设置动画在父时间轴开始时间(在任何delay被定义之后)
time ( value:Number, suppressEvents:Boolean ) : * 获取或者设置播放头的局部位置
timeScale ( value:Number ) : * 动画播放速度,1表示正常速度,0.5表示半速,2表示双倍速度)
TweenLite.to ( target:Object, duration:Number, vars:Object ) : TweenLite 看示例
totalDuration ( value:Number ) : * 获得或者设置包括repeat的总持续时间)
totalProgress ( value:Number, suppressEvents:Boolean ) : * 获取或者设置总进程,包括repat
totalTime ( time:Number, suppressEvents:Boolean ) : * 获取或者设置时间,包括repat)