偶然发现一个很强大打的动画库,果断了解一下。

<script src = ‘https://cdnjs.cloudflare.com/ajax/libs/gsap/2.0.2/TweenMax.min.js’></script>

先给文件链接。

1.简单示例

<!DOCTYPE html><html><head><meta charset=”UTF-8″><title></title><style>#box{width: 100px;height: 100px; background: red;}</style><script src = ‘https://cdnjs.cloudflare.com/ajax/libs/gsap/2.0.2/TweenMax.min.js’></script></head><body><div id=”box”><div></body><script>var t =new TimelineMax();t.to(‘#box’,2,{width:200});</script></html>

执行代码会发现元素的宽度从100到200,动画时间是2秒;

2.再来个多属性运动

<!DOCTYPE html><html><head><meta charset=”UTF-8″><title></title><style>#box{width: 100px;height: 100px; background: red;position: absolute;top: 0;left: 0;}</style><script src = ‘https://cdnjs.cloudflare.com/ajax/libs/gsap/2.0.2/TweenMax.min.js’></script></head><body><div id=”box”><div></body><script>var t =new TimelineMax();t.to(‘#box’,2,{width:200,x:100,y:200});</script></html>

上面代码中的参数XY指的是元素的偏移量相当于定位中的left和top。但是xy最后渲染出来是用translate偏移来完成的。这样写的好处是,用translate渲染的元素不会刷新DOM而用left和top定位的元素会更新DOM。所以如果有偏移量动画的需求尽量用X,Y代替。

3.动画的执行方式

<!DOCTYPE html><html><head><meta charset=”UTF-8″><title></title><style>#box{width: 100px;height: 100px; background: red;position: absolute;top: 0;left: 0;}</style><script src = ‘https://cdnjs.cloudflare.com/ajax/libs/gsap/2.0.2/TweenMax.min.js’></script></head><body><div id=”box”><div></body><script>var t =new TimelineMax();t.to(‘#box’,2,{width:200,x:100,y:200,ease:Bounce.easeInOut});</script></html>

ease参数 有以下可选属性

/*
         *动画种类
         * Linear  线性变化(匀速运动)
         * Back    返回变化
         * Bounce  弹跳动画
         * Circ    圆形变化
         * Cubic   立方体变化
         * Elastic 橡皮圈变化
         * Expo    爆炸变化
         * Quad
         * Quint 
         * Sine
         * 
         * */

4.多个元素同时运动

<!DOCTYPE html><html><head><meta charset=”UTF-8″><title></title><style>#box,#box2{width: 100px;height: 100px; background: red;margin-bottom: 10px;}</style><script src = ‘https://cdnjs.cloudflare.com/ajax/libs/gsap/2.0.2/TweenMax.min.js’></script></head><body><div id=”box”><div><div id=”box2″><div></body><script>var t =new TimelineMax();t.staggerTo(‘div’,2,{y:200});</script></html>

5.动画中的战斗机贝塞尔曲线 先看一张图(有点糙不过这个不是重点)

 

 

 

  

 

 

 

 

下面上代码

<!DOCTYPE html><html><head><meta charset=”UTF-8″><title></title><style>#box{width: 100px;height: 100px; background: red;margin-bottom: 10px;}</style><script src = ‘https://cdnjs.cloudflare.com/ajax/libs/gsap/2.0.2/TweenMax.min.js’></script></head><body><div id=”box”><div></body><script>var t =new TimelineMax();t.staggerTo(‘#box’,1,{cycle:{bezier:function(){ return [{x:0,y:0},{x:200,y:200},{x:400,y:0}]}}},0.2);</script></html>

6.事件

<!DOCTYPE html><html><head><meta charset=”UTF-8″><title></title><style>#box{width: 100px;height: 100px; background: red;margin-bottom: 10px;}</style><script src = ‘https://cdnjs.cloudflare.com/ajax/libs/gsap/2.0.2/TweenMax.min.js’></script></head><body><div id=”box”><div></body><script>//onStart 动画开始//onUpdate 动画运行//onComplete 动画结束var t =new TimelineMax();t.staggerTo(‘#box’,1,{x:100,onComplete :function(){//如果多个元素同时运动 this.target获取的是当前执行动画的DOM节点console.log(this.target)}},0.2);</script></html>

7.3D动画

其实这个很简单加一个属性就OK

<!DOCTYPE html><html><head><meta charset=”UTF-8″><title></title><script type=”text/javascript” src=”js/TweenMax.js” ></script><style>#box{width: 200px;height: 200px;}#box div{display:inline-block;width:20px;height: 20px; background: red;vertical-align: middle;}</style></head><body><div id=”box”></div></body><script>var box = document.getElementById(“box”);for(var i=0;i<100;i++){var div = document.createElement(“div”);box.appendChild(div);}var t =new TimelineMax();t.set(‘#box div’,{transformPerspective:600,transformOrigin:’left’,transformStyle:”preserve-3d”})t.staggerTo(‘#box div’,1,{rotationY:20,onComplate:function(){t.set(‘#box div’,{transformPerspective:600,transformOrigin:’center’})t.staggerTo(‘#box div’,2,{rotationX:180,scale:0.2,alpha:0})}})</script></html>

暂时更这么多。后续会更新一些TweenMax开发的动画。