TweenJS 模块
TweenJS提供了一个简单但强大的渐变界面。它支持渐变的数字对象属性&CSS样式属性,并允许链接补间动画和行动结合起来,创造出复杂的序列。
简单tween
下面的示例渐变:1000ms内将目标的alpha属性从0-1渐变,之后调用 'handleComplete' 函数
target.alpha = 0;
createjs.Tween.get(target).to({alpha: 1}, 1000).call(handleComplete);
function handleComplete(){
}
参数和作用域
Tween 也支持带参数和(或)作用域的 'call()' 方法。如果没有传递作用域,则匿名调用函数(就是通常javascript的行为)。在进行面向对象风格的开发时,传递scope对于维护scope是非常有用的。
createjs.Tween.get(target).to({alpha: 0}).call(handleComplete, [argument1, argument2], this);
链式tween
下面的示例渐变:等待0.5s,1000ms内将目标的alpha属性渐变到0,并设置visible为false。之后调用 'handleComplete' 函数
target.alpha = 1;
createjs.Tween.get(target).wait(500).to({alpha: 0, visible: false}, 1000).call(handleComplete);
function handleComplete(){
}
浏览器支持
TweenJS支持所有的浏览器
1.TweenJS
TweenJS 是一个静态类,可获取类库的具体信息,例如:库的版本、构建日期等。
2.AbstractTween
Tween 和 Timeline 的基类。不应该被直接实例化。
3.Tween
针对单个目标元素进行属性渐变。可以链式操作,创建复杂的动画序列
示例:
createjs.Tween.get(target)
.wait(500)
.to({alpha: 0, visible: false}, 1000)
.call(handleComplete);
多个渐变,可共享一个目标元素,但如果多个渐变,影响的是同一个属性,可能会出现意想不到的行为。要停止一个对象上的所有渐变,使用 'removeTweens' 或者传递 'override: true' 原型参数
createjs.Tween.get(target, {override: true})
.to({alpha: 0, visible: false}, 1000);
订阅 Tween/change事件
createjs.Tween.get(target, {override: true})
.to({x: 100})
.addEventListener('change', handleChange);
function handleChange(){
// 渐变发生时触发
}
4.Timeline
Timeline 类同步多个渐变,并允许把多个渐变作为一组来进行控制。注意:如果时间轴正在循环,即使渐变自身的 'loop' 属性设置的是false,时间轴上的渐变也可能循环。
注意:时间轴目前也接受如下形式的参数列表:tweens, labels, props。这只是为了向后兼容,将来会被移除。原型对象上会包含 tweens 和 labels 作为它的属性。
5.Ease
Ease 类提供了用于 TweenJS 的easing功能集合。它不使用 standard 4 param easing signature(标准easing签名)。相反,它使用单个参数,表示渐变的当前线性比率(0-1)。
Ease上的大多数方法,可以直接作为easing功能直接传递:
Tween.get(target).to({x: 100}, 500, Ease.linear);
然而,以 'get' 前缀开头的方法,需要根据参数值返回一个easing功能:
Tween.get(target).to({x: 100}, 500, Ease.getPowIn(2.2));
查看 TweenJS 支持的 ease 类型:
https://www.createjs.com/demos/tweenjs/tween_sparktable
6.ColorPlugin
ColorPlugin 使得渐变支持几乎任意的CSS颜色值。包括:3或6位十六进制颜色(#fff, #ffffff), rgb, rgba, hsl和hsla颜色。(但不支持名称颜色,例如:red)
ColorPlugin 可以操作 rgb或hsl 模式。它会将所有颜色转换为当下的模式,并相应的输出它们。
7.CSSPlugin
CSSPlugin 用于处理数字CSS字符串属性(例如:top, left)。使用的话,需要在 TweenJS 加载完毕后,简单安装:
createjs.CSSPlugin.install();
CSSPlugin 几乎适用于任何style属性或单位。它通过查找元素style对象上的初始值,来识别 CSS 值。也使用这个初始值来解析出,该值所使用的单位。
在下面的例子中,通过 CSSPlugin,'top' 属性将会被渐变,且使用 'em' 单位(由 CSSPlugin 根据初始值解析出来),且,而 'width' 属性不会被渐变(因为width没有初始的内联样式值)
myEl.style.top = '10em';
createjs.Tween.get(myEl).to({top: 20, width: 100}, 1000);
CSSPlugin 也可用于计算样式。请查看 'AbstractTween/compute:property' 获取更多信息
CSSPlugin 对于 'transform' 样式有特定的处理,只要它们的操作和单位匹配,就会进行任意转换的渐变。例如:
myEl.style.transform = 'translate(20px, 30px)';
createjs.Tween.get(myEl)
.to({transform: 'translate(40px, 50px)'}, 900) // 可渐变,每项都匹配上了
.to({transform: 'translate(5em, 300px)'}, 900) // 不可渐变,出现不同的单位(px 对 em)
.to({transform: 'scaleX(2)'}, 900) // 不可渐变,不同的操作(translate 对 scaleX)
也可使用 '*' 来复制上个 'transform' 相同位置的操作
myEl.style.transform = 'translate(0px, 0px) rotate(0deg)';
createjs.Tween.get(myEl)
.to({transform: 'translate(50px, 50px) *'}, 900) // 会复制 'rotate' 操作
.to({transform: '* rotate(90deg)'}, 900) // 会复制 'translate' 操作
注意:
CSSPlugin 不包含在 TweenJS 压缩文件
8.MotionGuidePlugin
MotionGuidePlugin 用于处理运动导向。定义对象可以跟随或定向的路径。
使用该插件,需要在 TweenJS 加载完毕后安装。
createjs.MotionGuidePlugin.install();
定义一个路径:
// 使用运动导向
createjs.Tween.get(target).to({guide: {path: [0, 0, 0, 200, 200, 200, 200, 0, 0, 0]}}, 7000);
// 上方运动导向的可视化线条
graphics.moveTo(0, 0).curveTo(0, 200, 200, 200).curveTo(200, 0, 0, 0);
每条路径都需要预先计算,以确保最高性能。正因为预先计算,Tween不支持改变路径。下面是导向对象的属性:
path - 必须,数组。用于绘制路径的多个点(x, y)。
start - 可选,0-1。初始位置,默认为0(我们可以将路径理解为0-1一个区间,可能中间一个点开始运动,中间点就是0.5)
end - 可选,0-1。结束位置,默认为1
orient - 可选,字符串:'fixed/auto/cw/ccw'。
fixed -
auto -
cw/ccw -
即便是每个渐变的所有属性都一样,也不应该在各个渐变间共享导向对象。MotionGuidePlugin库 在后台会存储这些对象的信息,如果共享它们会产生意外行为。'0-1' 范围之外的渐变,will be a "best guess" from the appropriate part of the defined curve(将是定义曲线适当部分的"最佳猜测")
9.RelativePlugin
RelativePlugin 可以让渐变使用 '相对数值'。安装:
RelativePlugin.install();
一旦安装,可以使用以 '+/-' 的相对数值属性的字符串。例如:下面的渐变,使 'x' 从 200 渐变到 50,再到 125。
foo.x = 200;
Tween.get(foo)
.to({x: '-150'}, 500)
.to({x: '+75'}, 500);
10.RotationPlugin
RotationPlugin 可以修改渐变的 '旋转' 属性。安装:
RotationPlugin.install();
安装后,默认情况下,渐变的所有旋转,会以最短方向旋转。例如:从15°渐变渲染到330°,将会逆时针旋转45°。可以通过设置 rotationDir 渐变值,来改变默认行为。
-1 - 强制 'CCW' 旋转
1 - 强制 'CW' 旋转
0 - 禁用插件旋转效果
注意:rotationDir 值一旦设置,将会持久保存,除非之后调用,被覆盖掉。设置为 'null',来重置默认行为。
myTween.get(foo)
.to({rotation: 30, rotationDir: -1}) // CCW
.to({rotation: 60}) // 仍然是 CCW(因为持久保存)
.to({rotation: 10, rotationDir: 1}); // CW
也可以对单个渐变,完全禁用插件:
tween.pluginData.Rotation_disabled = true; // tween - 具体的一个渐变
11.SamplePlugin
TweenJS的示例插件。这个插件纯粹是为了演示,并包含有关构建插件的文档和有用的技巧。(可参考官方实例,来发布自己的插件)
// 下面几个,在 CreateJS 套件里是公共的
12.Event
13.EventDispatcher
14.Ticker
15.Utility Methods