当前位置:首页 > 日记 > 正文

详解tween.js的使用教程

详解tween.js的使用教程

前面的话

TweenJS提供了一个简单但强大的渐变界面。它支持渐变的数字对象属性&CSS样式属性,并允许链接补间动画和行动结合起来,创造出复杂的序列。本文将详细介绍tween.js的使用

 概述

tween.js允许以平滑的方式修改元素的属性值。只需要告诉tween想修改什么值,以及动画结束时它的最终值是什么,动画花费多少时间等信息,tween引擎就可以计算从开始动画点到结束动画点之间值,来产生平滑的动画效果

例如,假设有一个对象position,它的坐标为 x 和 y:

var position = { x: 100, y: 0 }

如果想改变 x 的值从100到200,只需要这样做:

// Create a tween for position firstvar tween = new TWEEN.Tween(position); // Then tell the tween we want to animate the x property over 1000 millisecondstween.to({ x: 200 }, 1000);

到这里只是创建了tween对象,需要激活它,让它开始动画:

// And set it to starttween.start();

最后为了平滑动画效果,需要在同一个循环动画中调用TWEEN.update方法。代码如下:

animate(); function animate() {  requestAnimationFrame(animate);  // [...]  TWEEN.update();  // [...]}

这个动作将会更新所有被激活的tweens,在1秒钟(例如1000ms)position.x 将变为200。

也可以使用onUpdate回调函数将结果打印到控制台上

tween.onUpdate(function() {  console.log(this.x);});

这个函数在每次tweens被更新时都被调用。它的出现频次依赖于很多因素。例如:依赖于你的电脑或设备的运行速度

开始动画

Tween.js本身不会运行,需要通过update方法明确的告诉它什么时候开始运行。推荐在动画主循环中使用该方法。可以通过调用requestAnimationFrame方法来获得良好的图像性能

animate(); function animate() {  requestAnimationFrame(animate);  // [...]  TWEEN.update();  // [...]}

这里使用无参数调用方式,update方法将明确当前时间,以便于获取上一次动画的执行时间。

也可以为update方法明确一个时间:

TWEEN.update(100);

上面语句的意思是说:update的时间=100毫秒。可以使用这种方法来明确代码中所有随时间变化的函数。例如,动画已经开始,想所有动画都同步进行,animate代码改成这样:

var currentTime = player.currentTime;TWEEN.update(currentTime);

控制动画

【start和stop】

Tween.start和Tween.stop分别用于控制tween动画的开始和结束

对于已经结束和没有开始的动画,Tween.stop方法不起作用。Tween.start方法同样接收一个时间参数。如果使用了该参数,tween动画将在延时该时间数后才开始动画。否则它将立刻开始动画

【update】

可以通过TWEEN.update方法来执行动画的更新

【chain】

如果你制作多个多行,例如:一个动画在另一个动画结束后开始。可以通过chain方法来使实现。如下代码,tweenB 在 tweenA 之后开始动画

tweenA.chain(tweenB);

可以像下面这样制作一个无限循环的动画:

tweenA.chain(tweenB);tweenB.chain(tweenA);

【repeat】

如果你制作循环动画可以使用chain来实现,但是更好的方法是使用repeat方法。它接收一个用于描述想循环多少次的参数

tween.repeat(10); // repeats 10 times and stopstween.repeat(Infinity); // repeats forever

【yoyo】

这个函数只在使用repeat方法时起作用。当它被激活时,tween的效果类似yoyo球效果。该效果是动画会在开始或结束处向反方向反弹

【delay】

delay方法用于控制动画之间的延时

tween.delay(1000);tween.start();

全局方法

以下的方法定义在 TWEEN 的全局对象中,其中大多数方法都用不上,除了update方法:

【TWEEN.update(time)】

该方法用于所有被激活的tweens,如果time没有被指定,将使用当前时间。

【TWEEN.getAll 和 TWEEN.removeAll】

这两个方法用于获取被激活的tweens数组的一个引用,或从数组中删除所有tweens。

【TWEEN.add(tween) 和 TWEEN.remove(tween)】

用于向被激活的tweens中添加一个tween,或移除一个tween

easing函数

tween.js提供了一些可用的easing函数。可用函数有:Linear, Quadratic, Cubic, Quartic, Quintic, Sinusoidal, Exponential, Circular, Elastic, Back 和 Bounce。easing 类型分为: In, Out 和 InOut

不但可以使用tween.js提供的easing函数,还可以自定义easing函数。但必须遵守下面的规则

1、它必须接收一个参数

2、它必须基于输入参数返回一个值

easing函数仅在每个tween每次被更新时调用,而不管有多少属性被改变。结果随后会被用于初始值

easedElapsed = easing(k);for each property:  newPropertyValue = initialPropertyValue + propertyDelta * easedElapsed;

下面是一个使用Math.floor来做easing效果的例子:

function tenStepEasing(k) {  return Math.floor(k * 10) / 10;}

可以在tween 这样使用它

tween.easing(tenStepEasing);

回调函数

另外一个有用的特性是可以在每次tween循环周期的指定时间点调用自定义的函数。

例如:假设想使一些不能直接修改参数的对象执行动画,要访问该对象的参数只能通过setter方法,可以通过update方法的回调函数来设置新的setter值

var trickyObjTween = new TWEEN.Tween({  propertyA: trickyObj.getPropertyA(),  propertyB: trickyObj.getPropertyB()})  .to({ propertyA: 100, propertyB: 200 })  .onUpdate(function() {    this.setA( this.propertyA );    this.setB( this.propertyB );  });

或者如果想确认tween动画开始后某个对象指定状态下的某个值,可以通过start回调来获取它:

var tween = new TWEEN.Tween(obj)  .to({ x: 100 })  .onStart(function() {    this.x = 0;  });

【onStart】

tween开始动画前的回调函数。

【onStop】

tween结束动画后的回调函数。

【onUpdate】

在tween每次被更新后执行。

【onComplete】

在tween动画全部结束后执行。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

相关文章

老生常谈js-react组件生命周期

老生常谈js-react组件生命周期

生命周期,组件,老生常谈,电脑软件,react,组件的生命周期可分成三个状态:?Mounting:已插入真实 DOM?Updating:正在被重新渲染?Unmounting:已移出真实 DOM生命周期的方法有:?componentWillMount 在渲染前调用,在客户端也在服务端。?componentDidMo…

老生常谈js中0到底是 true 还是 fa

老生常谈js中0到底是 true 还是 fa

老生常谈,电脑软件,true,js,false,想到一个好玩的,运行如下 javascript :if ('0') alert("'0' is true");if ('0' == false) alert("'0' is false");结果是,两次都 alert 了!那么 '0' 到底是 true 还是 false 呢?答案是:在js做比较…

Excel表格函数出错怎么解决

Excel表格函数出错怎么解决

函数,表格,电脑软件,Excel,  工作中经常使用Excel的朋友可能都会遇到一些看起来似懂非懂的错误值信息:例如# N/A!、#VALUE!、#DIV/O!等等,出现这些错误的原因有很多种,你真的了解它们吗,熟练掌握解决这些错误的方法吗?下面给大家分享Excel中…

ps怎么给图形上渐变色

ps怎么给图形上渐变色

图形,渐变色,方法,电脑软件,ps,  给图形上色在ps中很简单,但其实上渐变色也很好看。那么大家知道ps怎么给图形上渐变色吗?下面是小编整理的ps怎么给图形上渐变色的方法,希望能帮到大家!ps给图形上渐变色的方法1、新建一个图层,画一个圆形。2…

解决浏览器记住ajax请求并能前进和

解决浏览器记住ajax请求并能前进和

请求,浏览器,并能,电脑软件,ajax,在我们浏览不同网页的时候,我们可以通过浏览器的前进、后退键来去到我们前后访问过的页面。这都有一个共同点,就是 浏览器地址栏的地址改变了。浏览器自身维护了一个记录用户访问页面历史的栈,栈中记录了用户…

WPS演示插入背景音乐的方法是什么

WPS演示插入背景音乐的方法是什么

方法,背景音乐,演示,电脑软件,WPS,  制作PPT的时候,需要加入一些元素使得PPT更加吸引人,其中给PPT加入背景音乐是常用的方法之一。那么在wps中,这个方法应该怎么使用,一起来探讨一下。以下是小编为您带来的关于WPS演示插入背景音乐的方法,希望…

JavaScript定义函数的三种实现方法

JavaScript定义函数的三种实现方法

方法,函数,三种,定义,电脑软件,JavaScript定义函数的三种实现方法【1】正常方法function print(msg){ document.write(msg);}对函数进行调用的几种方式: 函数名(传递给函数的参数1,传递给函数的参数2,….)变量 = 函数名(传递给函数的参数1,传递给…

详解JS中的立即执行函数

详解JS中的立即执行函数

立即执行函数,详解,电脑软件,JS,1.匿名函数不能单独定义,必须进行赋值操作或者立即执行,否则会被JS引擎定义为语法错误function(){alert(dada);}VM229:1 Uncaught SyntaxError: Unexpected token 2.在函数体后面加括号就能立即调用,这个函数形…

JS倒计时实例_天时分秒

JS倒计时实例_天时分秒

分秒,天时,倒计时,实例,电脑软件,HTML代码:<div id="times_wrap" class="time_num"> 距离结束时间: <div class="time_w"> <b id="times_d" class="time"> </b>天 <b id="times_h" class="time"> </b>时 <b id="times_m" …

Word中进行设置半透明的操作方法

Word中进行设置半透明的操作方法

设置,半透明,操作方法,操作步骤,电脑软件,  在我们使用word的时候经常会往里面插入一些图片,在word中,我们还可以将图片的背景颜色更改为半透明色,还可以做些其他的改动。今天,小编就教大家在Word中进行设置半透明的操作方法。Word中进行设置…

photoshop cs6怎么替换颜色 photos

photoshop cs6怎么替换颜色 photos

替换,教程,颜色,植物,电脑软件,如果发现自己的照片颜色不理想,想要替换颜色怎么办?其实我们可以使用ps任意替换颜色。那么,如何使用photoshop cs6替换颜色呢?下面小编就给大家介绍photoshop cs6给植物图片替换颜色的方法,一起去看看吧!方法/步骤:1…

js绑定事件和解绑事件

js绑定事件和解绑事件

事件,绑定事件,电脑软件,js,在js中绑定多个事件用到的是两个方法:attachEvent和addEventListener,但是这两个方法又存在差异性attachEvent方法 只支持IE678,不兼容其他浏览器addEventListener方法 兼容火狐谷歌,不兼容IE8及以下addEvent…