快速连结: 引言 开始玩转 原文链接:http://greensock.com/get-started-js
|
查看下载页面,您可以下载内含精缩和未压缩的zip文件,或者把CDN连结贴到您的网页。获得一大堆文件的最简单方法是连结到最新的TweenMax的CDN文件。
1
|
<
script
src
=
"http://cdnjs.cloudflare.com/ajax/libs/gsap/latest/TweenMax.min.js"
>
script
>
|
由于TweenMax包括TweenLite、CSSPlugin、EasePack、TimelineLite、TimelineMax、RoundPropsPlugin、BezierPlugin、AttrPlugin和DirectionalRotationPlugin,所以只要用这一个文件就给您一大堆可以玩的物品,而且CDN有助于快速载入。但是,如果您更关心文件的大小,可以挑选要载入的核心部份和插件(常见的选择是轻量级的TweenLite、CSSPlugin和EasePack)。例如:
1
2
3
|
<
script
src
=
"http://cdnjs.cloudflare.com/ajax/libs/gsap/latest/plugins/CSSPlugin.min.js"
>
script
>
<
script
src
=
"http://cdnjs.cloudflare.com/ajax/libs/gsap/latest/easing/EasePack.min.js"
>
script
>
<
script
src
=
"http://cdnjs.cloudflare.com/ajax/libs/gsap/latest/TweenLite.min.js"
>
script
>
|
请注意这是连结文件的"最新"版本,这意味着随着新版本出现,您可以自动获得这些更新。通常这是一件好事,特别是当bug被发现和解决时,但要注意,有可能更新会改变行为(无论是因为无心的引擎代码更新或是故意的改变功能或API改变),所以您可以在CDN连结到特定版本(如1.9.0),如果您想要(详见下载页面)。不要担心-我们对于做出可能影响原有代码的改变是非常谨慎的。注册GreenSock帐户来加入邮件列表,并获得有关可能影响代码的重要更新通知。
当然您也不需要使用CDN的连结。如果您是下载zip ,可以到"src"文件夹,会看到"minified(精缩)"和"uncompressed(未压缩)"文件夹中的所有源代码-请自行放到您的伺服器或本地文件系统。您通常会希望使用精缩的文件进行部署,因为它们载入速度较快,但在功能上未压缩和精缩版本是完全相同的。包含"未压缩"文件是以防万一您要一窥源码,看看里面发生了什么事(其包含注解和更适合人类读的代码)。您也可以看看我们的Github存储库 。
如果您不需要动画DOM元素样式,您就不需要CSSPlugin。例如您可以只用非常轻量的TweenLite,使canvas上的EaselJS物件或SVG的RaphaelJS物件动起来。如果您并不需要特别缓动方程式只需基本的(Power0、Power1、Power2、Power3、Power4、Linear、Quad、Cubic、Quart、Quint和Strong这些都包含在TweenLite文件中),那您可以略过EasePack,其增加了Elastic、SlowMo、Bounce、SteppedEase、Sine、Circ和Expo。
在任何的动画代码之前不要忘了载入Javascript文件。(否则当浏览器获取到您的动画代码时,不会知道什么是"TweenMax"或"TweenLite",因为它还没有载入)。
我们强烈建议保持您的GSAP文件进行更新 ,因为我们正在积极增强功能,解决浏览器的bug或矛盾,常来逛逛本站并获得最新文件。
GSAP没有依存于jQuery,但如果您已经习惯了的jQuery.animate()方法,或者您现有的项目大量使用jQuery,且您更愿意得到GSAP引擎的速度优势,那么 jquery.gsap 插件是您的最佳选择,其附加所有的额外可补间属性,如3D transforms、colors、boxShadow等。jquery.gsap插件基本上模仿正规jQuery.animate()方法,并用GSAP驱动动画。我们建议您最终转移到正规GSAP工具或API,而非jquery.gsap插件,因为您可以用物件导向的本质得到更多的灵活性和力量,不过jQuery插件是添加GSAP到您的jQuery项目的不费吹灰之力方式。详见此获取有关此插件的详细讯息 。
1
2
|
//开始前等待2秒("delay"属性会被TweenLite识为一个特殊的属性)
TweenLite.to(photo, 1.5, {width:100, delay:2});
|
1
2
3
4
5
|
//注意onComplete后的函数没有"()",因为它只是一个函数本身引用(您还不需要调用之)
TweenLite.to(photo, 1.5, {width:100, delay:0.5, onComplete:myFunction});
function
myFunction() {
console.log(
"tween finished"
);
}
|
1
2
|
TweenLite.to(photo, 1, {width:100, ease:Power2.easeOut});
TweenLite.to(photo, 1, {height:200, ease:Elastic.easeOut});
|
1
2
|
TweenLite.to(photo, 1, {width:100, ease:
"Elastic.easeOut"
});
TweenLite.to(photo, 1, {height:200, ease:
"easeOutElastic"
});
|
插件
把插件想成动态添加到TweenLite的特殊属性,使其有额外的能力。这样可以确保核心引擎小型、高效又允许几乎无限的动态添加能力。每个插件关联一个属性名称,其负责处理该属性。例如,CSSPlugin关联"CSS"属性名称,所以如果载入它,它会拦截"css"属性又如ScrollToPlugin将截取"scrollTo"值等:
1
2
3
4
5
|
//CSSPlugin将截取"CSS"的值...
TweenLite.to(photo, 1, {css:{scaleX:0.5, rotation:30}, ease:Power3.easeOut});
//ScrollToPlugin将截取"scrollTo"值(如果它有被载入的话)...
TweenLite.to(window, 2, {scrollTo:{y:300}, ease:Bounce.easeOut});
|
1
2
3
|
//在1.8.0版,以下两行会产生相同的结果,但是第一个实例稍快。虽然第二个比较方便写。
TweenLite.to(element, 1, {css:{top:
"20px"
, backgroundColor:
"#FF0000"
}, ease:Power2.easeOut});
TweenLite.to(element, 1, {top:
"20px"
, backgroundColor:
"#FF0000"
, ease:Power2.easeOut});
|
补间动画的CSS属性
在CSSPlugin的帮助下,GSAP几乎可以动画任何DOM元素的CSS相关属性,包括width、heihgt、margin、padding、top、left和更多复杂的属性,如transform(rotation、scaleX、scaleY、skewX、skewY、X、Y、rotationX和rotationY)、color、backgroundPosition、opacity以及更多的属性。载入CSSPlugin js文件来启用这些功能。
注意:一个常见的错误是忘记使用驼峰式大小写法,所以不是"font-size",您应该使用"fontSize"。 "background-color"将是"的backgroundColor"。
您甚至可以定义非一般的可补间属性,GSAP将为您应用属性(例如position:"absolute"或borderStyle:"solid")。适用于定义一个计量单位(如"24px"而不是"24"或者"50%"而不是"50"),但在大多数情况下预设是像素(px),这样您就可以省略单位。即使计量单位不符合目前的,GSAP会尝试将变形它们。因此,举例来说,您可以补间宽度从"50%"到"200px"。
CSSPlugin甚至可以动画复杂的值,如boxShadow:"0px 0px 20px 20px red"和borderRadius:"50% 50%"和border:"5px solid rgb(0,255,0)"必要时,它试图找出需要提供前缀的属性,并相应地应用它。可能CSSPlugin还不能处理一小部分复杂的或出血的CSS属性,但绝大多数的都良好运作。
此外CSSPlugin识别几乎所有标准的CSS属性和一些特殊的属性,这相当方便:
1
2
|
//简单多了
TweenLite.to(element, 2, {rotation:30, scaleX:0.8});
|
1
2
|
//用"deg"或"rad"
TweenLite.to(element, 2, {rotation:
"1.25rad"
, skewX:
"30deg"
});
|
1
|
TweenLite.to(element, 2, {rotationX:45, scaleX:0.8, z:-300});
|
1
2
3
4
5
6
7
8
|
//应用角度到父元素(容器),使角度应用到所有子元素(通常这样是最好的)
TweenLite.set(container, {perspective:500});
//或设置用于3D补间动画的每个单独元素的预设视角:
CSSPlugin.defaultTransformPerspective = 500;
//或者使用"transformPerspective"应用视角到单一元素
TweenLite.set(element, {transformPerspective:500});
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
//CSS范例:
.myClass {
transform: scale(1.5, 1.5) rotateY(45deg) translate3d(10px, 0px,-200px)
}
//对应的GSAP变形(补间2秒):
TweenLite.to(element, 2, {scale:1.5, rotationY:45, x:10, y:0, z:-200});
//使用perspective()的CSS范例:
.myClass {
transform: perspective(500px) rotate(120deg) translateY(50px)
}
//对应的GSAP变形(设定而已,没有补间):
TweenLite.set(element, {transformPerspective:500, rotation:120, y:50});
|
1
2
|
//沿着元素的左上角旋转
TweenLite.to(element, 2, {rotation:360, transformOrigin:
"left top"
});
|
1
2
|
//沿着离左上角50像素和20像素的点旋转和缩放
TweenLite.to(element, 2, {rotation:270, scale:0.5, transformOrigin:
"50px 20px"
});
|
1
2
3
4
|
TweenLite.to(element, 2, {rotation:
"-170_short"
});
//甚至可以用于3D旋转:
TweenLite.to(element, 2, {rotation:
"-170_short"
, rotationX:
"-=30_cw"
, rotationY:
"1.5rad_ccw"
});
|
1
2
3
4
5
|
//淡出并设置visibility:hidden
TweenLite.to(element, 2, {autoAlpha:0});
//在2秒内,淡出且visibility:visible
TweenLite.to(element, 2, {autoAlpha:1, delay:2});
|
1
|
TweenLite.to(myElement, 1, {className:
"class2"
});
|
1
|
TweenLite.to(myElement, 1, {className:
"+=class2"
});
|
1
2
3
4
5
|
//使用静态to()方法...
var
tween = TweenLite.to(element, 1, {width:
"50%"
});
//或使用物件导向的语法...
var
tween =
new
TweenLite(element, 1, {width:
"50%"
});
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
|
//暂停
tween.pause();
//恢复(方向-反转或不反转)
tween.resume();
//反转(总是回到初始值)
tween.reverse();
//跳转到恰好0.5秒
tween.seek(0.5);
//补间半速
tween.timeScale(0.5);
//补间双速
tween.timeScale(2);
//立即删除补间,并使其符合垃圾收集
tween.kill();
|
1
|
TweenLite.killTweensOf(myElement);
|
学习TweenMax和TimelineMax
档案小、出色的性能和相对强大的功能集是在TweenLite和TimelineLite的优先考量,不过也有一些没有膨大核心组件的添加额外功能。进入TweenMax和TimelineMax。 TweenMax延伸自TweenLite,做TweenLite所做的一切,且加入额外的功能像是repeat、yoyo、repeatDelay等。TimelineMax跟TimelineLite做一样的事情。另外当您载入TweenMax Javascript文件时,会包括一些额外自动载入的功能,如CSSPlugin、RoundPropsPlugin、BezierPlugin、AttrPlugin、DirectionalRotationPlugin、TimelineLite、TimelineMax和EasePack。基本上如果文件的大小是您主要关切的问题,那就坚持使用TweenLite并手动载入任何用到的插件或减少您的需求。不然就使用TweenMax因为它用最小的设置提供最大的功能。
TweenMax使用了和TweenLite完全相同的语法。事实上,一个TweenMax实例是 TweenLite实例。如果您有一个项目已经使用了TweenLite,您可以用"TweenMax"取代所有的"TweenLite"实例而且会良好运作。TweenMax只是多识别了一些额外的特殊属性,例如:
1
2
3
4
5
|
//重复此补间3次(共4次),并在每个重复之间等待0.5秒
TweenMax.to(element, 1, {width:
"50%"
, repeat:3, repeatDelay:0.5});
//无限次淡入淡出(repeat为-1表示无限次)
TweenMax.to(element, 1, {opacity:0, repeat:-1, yoyo:
true
});
|
1
2
3
4
5
|
var
tl =
new
TimelineMax({repeat:3, yoyo:
true
, repeatDelay:1, onComplete:timelineDone, onCompleteParams:[
"test1"
,
"test2"
]});
tl.staggerTo([e1, e2, e3], 1, {opacity:0, rotation:360}, 0.2);
function
timelineDone(p1, p2) {
console.log(
"timeline done. params: "
+ p1 +
" and "
+ p2);
}
|
覆盖其他补间动画 一个经常被忽视的方面是补间如何(是否可以、何时)覆盖同一物件的其他补间动画。例如,假设您有一个按钮有着onmouseover和onmouseout处理程序,补间是"over"事件时不透明度较高;"out"事件时不透明度较低。更复杂的是"over"补间持续2秒,"out"补间持续1秒。如果用户快速的滑进滑出会发生什么事?看到问题了吗?如果补间无覆盖的运行,补间将建立并互相打架(一个试图把不透明度补间升高,而另一个降低不透明度)。在这个例子中,当用户滑进时,2秒补间就会开始增加不透明度为1,但如果用户在0.2秒后滑出,另一个补间将开始导致不透明度下降。当补间1秒后结束,"over"补间仍在继续(因为它有2秒的持续时间),所以不透明度会突然增加,并且就算用户滑出了不透明度还是维持在1! 不要担心。我们了解您的想法。 预设情况下,每当一个TweenLite实例(任何延迟后)第一次渲染,会分析相同目标的其他活化补间,并检查个别的重叠属性。如果发现任何重叠,就会(再次)删除违规的重叠,只会删除个别的属性。这种覆盖模式称为"auto" ,它通常是最直观的。不过可能有时候您希望新补间删除同一个物件的所有其他补间动画,无论其开始时间或重叠性。那是就要用"all"覆盖模式。而且为了完全略过覆盖,您可以定义覆盖模式为"none" 。还有一些其他的方式也可供选择,所以请查看完整的文件。用"overwrite"特殊属性定义覆盖模式,例如:
[JavaScript]
纯文本查看
复制代码
|
常见问题解答
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
|
//淡出所有类为"myClass"的元素[/size]
TweenLite.to(
".myClass"
, 1, {opacity:0});
//补间ID为"myElement"的元素的宽度到500px
TweenLite.to(
"#myElement"
, 1, {width:
"500px"
, ease:Elastic.easeOut});
//补间类为"myClass"的所有物件的"marginTop"为交错的方式,使它们从100px跑近来
var
tl =
new
TimelineLite();tl.staggerFrom(
".myClass"
, 1, {marginTop:
"-=100px"
, opacity:0}, 0.1);
//或使用jQueryeach()方法来遍历结果,并错开淡出
$(
".myClass"
).each(
function
(index, element) {
TweenLite.to( element, 1, {autoAlpha:0, delay:index * 0.2});
});
//添加使用$的点击处理函数来表示选单元素被点击并且把高补间成100px
$(
"#menu"
).click(
function
(){
TweenLite.to( $(
this
), 0.7, { height:
"100px"
, ease:Power2.easeInOut } );
}
);
|
1
2
3
4
5
|
//让myElement的宽度增加100px
TweenLite.to(myElement, 1, {width:
"+=100px"
});
//使myElement的旋转少30度
TweenLite.to(myElement, 1, {rotation:
"-=30deg"
});
|
1
2
|
//同时补间多个物件
TweenLite.to([e1, e2, e3], 1, {autoAlpha:0});
|
1
2
3
|
//下面产生相同的结果(属性的顺序并不重要)
TweenLite.to(element, 1, {width:
"50%"
, height:
"300px"
, ease:Power2.easeOut});
TweenLite.to(element, 1, {height:
"300px"
, width:
"50%"
, ease:Power2.easeOut});TweenLite.to(element, 1, {ease:Power2.easeOut, width:
"50%"
, height:
"300px"
});
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
TweenLite.to(element, 1, {width:
"50%"
, onComplete:myFunction, onCompleteParams:[
"param1"
,
"param2"
], onCompleteScope:
this
});
function
myFunction(p1, p2) {
console.log(
"tween completed. Received parameters: "
+ p1 +
" and "
+ p2 +
". The scope is: "
+
this
);
}
//或者如果您正在使用jQuery,这里是使用$(this)来阐明范围的一个例子。当您单击以"myElement"为id的元素时,它将补间其高度到100px,然后宽度到50%。注意因为我们定义onCompleteScope,在onComplete函数里面的"this"关键字是指元素本身:
$(
"#myElement"
).click(
function
(){
TweenLite.to($(
this
), 0.7, { height:
"100px"
, ease:Power2.easeInOut, onCompleteScope:$(
this
), onComplete:
function
(){
TweenLite.to(
this
, 0.7, { width:
"50%"
, ease:Power2.easeInOut} );
}
});
}
);
|
1
2
3
4
|
TweenLite.ticker.addEventListener(
"tick"
, tickHandler);
function
tickHandler() {
//在这里运行你的逻辑...
}
|
1
2
3
4
5
6
7
8
|
//首先,创建一个TimelineLite实例
var
tl =
new
TimelineLite();
//现在把3个序列补间动画串连在一起
tl.to(e1, 1, {autoAlpha:1}).to(e1, 2, {width:
"50%"
, ease:Power2.easeInOut}).to(e1, 1, {height:
"200px"
});
//或刚创建后就影响一个补间动画,像是设置时间刻度并且跳到0.5的时间然后暂停
TweenLite.to(element, 5, {width:
"500px"
}).timeScale(2).pause(0.5);
|
1
2
3
4
5
6
7
8
9
|
//首先让我们演示使用的常用方法为获取和设置
var
h = obj1.height();
//gets
obj1.height(100);
//sets
TweenLite.to(obj1, 1, {height:200});
//呼叫height()获得初始值,然后在补间的每一次更新传递新的值到height()来设定值。
//现在我们将演示使用单独的get / set方法
var
h = obj2.getHeight();
//gets
obj2.setHeight(100);
//sets
TweenLite.to(obj2, 1, {setHeight:200});
//TweenLite自动检查obj2.getHeight()获取初始值然后在补间的每一次更新使用obj2.setHeight()来设定高度。
|
保持最新 需要帮助? |