jquery animate 动画

如果只是简单的动画效果可以借助jquery的animate就可以,如果是复杂又不想损耗性能又要充分发挥HTML5性能推荐使用
GSAP是一套高性能的HTML5脚本工具。总之很好用兼容性也很好。
GSAP全称是GreenSock Animation Platform包括以下代码:
TweenLite:是一个极其快、轻量级、灵活的动画工具,为GSAP的底层服务。
TweenMax:是TweenLite的扩展,添加了很多有用的功能如:repeat(), repeatDelay(), yoyo()更多,还默认包括了一些有用的插件。
任意的插件也能在TweenLite上运行。TweenMax免去了你加载一些插件,如: CSSPlugin, RoundPropsPlugin, BezierPlugin, AttrPlugin, DirectionalRotationPlugin,EasePack, TimelineLite, and TimelineMax。TweenMax和TweenLite语法完全一样。
TimelineLite:是一个强大的排序工具。官方解释的抽象,用我自己的话来说就是一个链式工具,如jquery一样写法都是可以这样写,$(‘dom’).width().css().eq().animate。
这工具就是起到这样的作用,也有点类似队列动画的效果,上一个动画执行完成才能到下一个动画执行。避免了还要去一个个计算delay的时间才实现队列动画效果。TimelineLite也有自己的很多方法。
TimelineMax:是TimelineLite的扩展,又在TimelineLite基础上添加了很多有用的方法。TimelineMax文档
部分效果能兼容IE7/8,基本动画还是能兼容,兼容性还是不错的。
实际用处
jquery的animate的效果很有限,仅支持如height、width、left、top和scrollTop等一些基础效果。如果需要做transforms、color和number的过渡效果jquery
就不支持了非常遗憾。所以GSAP弥补了jquery的animate不足的地方。
效果演示:demo
代码概况:
var mov=new TweenMax.to(
'#box', //操作对象
2, //动画持续时间
{
css:{
left:100,
opacity:0.3
},
startAt:{left:10}, //初始化
delay:0, //1秒后开始执行动画
ease:Back.easeOut, //加速度效果
repeat:0, //多循环1次,也就是一共重复执行了2次同样的动画,-1就会无限重复循环
repeatDelay:0, //每次重复循环时间3秒,需要配合repeat属性
yoyo:false, //如果true,动画的循环是倒序,需要配合repeat属性
paused:false, //如果true,动画暂停
overwrite:'auto',
onStart:function(){ //动画开始前回调
document.title='开始前执行'
},
onStartParams:["{self}", "参数"],
onComplete:function(a,b){ //动画结束后回调
document.title='动画完成'
},
onCompleteParams:["{self}", "param2"], //为onComplete传参数,其中{self}值的是mov
immediateRender:true,
onUpdate:function(a,b){ //初始化执行一次,动画过程回调,以后动画有运动都还会不停的执行,直到动画结束才停止
// console.log(a.isActive());
},
onUpdateParams:["{self}", "参数"], //为onUpdate提供参数
useFrames:false
});
链式写法:GASP的链式写法要靠TimelineLite来实现的,如:
var tl = new TimelineMax({repeat:-1, delay:0, repeatDelay:2}); //公共属性可以写这里
tl.to('#box',10,{left:100,borderColor:'red'}) //独立属性可以各自写
.to('#box',2,{top:100,borderColor:'yellow'});
或者
推荐这样写,直观点
var tl = new TimelineMax({repeat:2, repeatDelay:1});
tl.add( TweenMax.to(element, 1, {left:100}) );
tl.add( TweenMax.to(element, 1, {top:50}) );
tl.add( TweenMax.to(element, 1, {opacity:0}) );
GASP也对jquery的animate功能进行扩展,添加了一个jquery.gsap.js,加载此插件后就可以像写jquery一样去写GASP了就免去了学习新的API,参考《代替jquery的animate属性插件–jquery.gsap.js》
批量操作动画
TweenMax.staggerFrom('.box', 5, {y:"150"}, 5); //动画逆播,获取全部class为box的元素,动画时间5秒,从y是150的位置开始到0,每个元素之间间隔5秒
TweenMax.staggerTo('.box', 1, {y:"+=150", opacity:0}, 0.2); //按顺序播放
TweenMax.staggerFromTo('.box', 5, {y:"150",x:'100'},{y:"00",x:'0'}, 5); //自行设置开始结束播放
TweenMax.staggerFrom('.box', 2, {
cycle:{
y:[50,-50], //第一个元素从50开始,第二个元素从-50开始,以此类推
y:function(i){
console.log(this); //this是dom元素本身
return i * 20; //i是当前元素的索引
}
}
},2);
属性链式写法
box.repeat(2).yoyo(true).repeatDelay(0.5).play();
延迟回调,指定几秒后才发生回调
TweenMax.delayedCall(3, myFunction, [true, "param2"]);
function myFunction(param1, param2) {
console.log(param1, param2);
}
myAnimation.duration() //获取动画运行的时间
myAnimation.duration(10) //重新设置动画运行的时间
myAnimation.timeScale(2) //速度的设置,2倍速度,效果相当于把duration的时间改小是一样的
myAnimation.endTime() //提前获取动画运动消耗的时间
mov.eventCallback("onComplete", myFunction, ["param1","param2"])
function myFunction(param1, param2) {
document.title=111;
}
myAnimation.isActive() //是否在动画中
TweenMax.globalTimeScale() //获取当前正常速度
TweenMax.globalTimeScale(0.5) //设置全局速度是原来速度慢一半
TweenMax.globalTimeScale(2) //比原来速度快2倍
mov.kill({left:true}); //禁用动画某一个种过渡属性
TweenMax.killAll(是否强制完成,是否禁用动画,是否禁用delayedCalls回调,是否禁用timelines);
TweenMax.killAll(true,false,false,false); //默认值都为false,如果第一个参数值为true,意思就是强制他们一定要完成效果或者是回调
TweenMax.killAll(false,true,false,false); //所有过渡动画都停止
TweenMax.killAll(true, true, false, false); //强制动画瞬间结束,并且保留动画结束的时的效果
TweenMax.killChildTweensOf( document.getElementById("fa") ); //父元素fa下的所有元素都禁止运动
mov.pause(6,true); //暂停在第6秒时候的动画,并且禁用任何回调
mov.paused(false); //恢复暂停
mov.paused(true); //暂停
mov.paused(); //获取动画是否暂停
TweenMax.pauseAll(tweens,delayedCalls,timelines);
mov.play(10,true); //从10秒开始动画,并且禁用任何回调
mov.progress( 0.5 ,true); //从进度的百分之50%后开始动画,并且禁用任何回调
.repeat() //循环
.repeatDelay() //循环间隔时间
mov.restart(true); //包括delay时间也重置
mov.restart(false); //忽略delay时间,动画立马执行
mov.resume(2); //重置,从2秒时刻开始
mov.reverse(0); //动画从结束状态开始倒退回开始状态
mov.reverse(-10); //动画从倒数第10秒开始逆播
mov.reversed(false); //禁止动画逆播
mov.startTime(2); //过几秒后开始动画,类似于delay属性优先于delay
mov.time(5); //从第5秒开始动画,忽略delay属性
mov.totalDuration(2); //动画持续时间
更多API自行去官网看
全部GASP插件集合打包:https://github.com/thealrivera/GSAP_UI
百度下载: http://pan.baidu.com/s/1nv9zU7v
国内各个版本下载:http://www.bootcdn.cn/gsap/
本地下载:GSAP_UI-master
如果想去官网下载使用,有些功能是需要注册会员收费的!!