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的元素的图片,将从此刻起,两秒内。宽度和高度分别达到指定的数值。
来看下效果
代码在这
可以看到我一开始定义的高宽都是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后面加载就行了。
可以看到如果我们修改了上面的代码,那么效果将是这样的:
从这几个例子中我们可以看到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});
这是效果:
更多语法
你可以用下面的方式调用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,不管它们是不是冲突的,就像auto 和all 的混合,适合单个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定时将基于帧而不是秒。这将导致duration
和delay
都基于帧。
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) |