- 浏览: 898861 次
- 性别:
- 来自: 青岛
文章分类
最新评论
-
chienchia:
请问下,第4步,vpn做了什么使数据包发送到真实网卡,而不会再 ...
如何使用Android系统自带的VPN服务框架 -
fangyafenqidai:
我只要选第二个就可以呢,怒需要选第一个。之后不会有啥问题。正常 ...
Android Studio 超级简单的打包生成apk -
michaelye1988:
不错,很棒!
getcachedir和getexternalcachedir的区别 -
whlei01:
文章棒棒哒
常用的AS3代码 -
whlei01:
很不错 之前打开及时600M的内存 ,现在打开只有300兆了 ...
flash builder内存不够的解决办法
Flash做动画时会用到Tween类,利用它可以做很多动画效果,例如缓动、弹簧等等。
我这里要教大家的是怎么利用flash的Tween类的算法,来做js的Tween算法,并利用它做一些简单的缓动效果。
实例效果
Tween类型:
Linear Quadratic Cubic Quartic Quintic Sinusoidal
Exponential Circular Elastic Back Bounce
ease类型:
easeIn easeOut easeInOut
首先大家到这里下载flash的as脚本(建议看看这里的demo),1.0和2.0都可以(里面的算法都一样)。
例如打开2.0的可以看到几个as文件,每个文件对应一个Tween效果,分别有(参考里面的说明):
Linear:无缓动效果;
Quadratic:二次方的缓动(t^2);
Cubic:三次方的缓动(t^3);
Quartic:四次方的缓动(t^4);
Quintic:五次方的缓动(t^5);
Sinusoidal:正弦曲线的缓动(sin(t));
Exponential:指数曲线的缓动(2^t);
Circular:圆形曲线的缓动(sqrt(1-t^2));
Elastic:指数衰减的正弦曲线缓动;
Back:超过范围的三次方缓动((s+1)*t^3 - s*t^2);
Bounce:指数衰减的反弹缓动。
ps:以上都是自己的烂翻译,希望各位修正。
每个效果都分三个缓动方式(方法),分别是:
easeIn:从0开始加速的缓动;
easeOut:减速到0的缓动;
easeInOut:前半段从0开始加速,后半段减速到0的缓动。
其中Linear是无缓动效果,没有以上效果。
然后看看里面的算法,以Quad.as的easeOut为例:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->static function easeOut (t:Number, b:Number, c:Number, d:Number):Number {
return -c *(t/=d)*(t-2) + b;
}
这是as代码,四个参数分别是:
t: current time(当前时间);
b: beginning value(初始值);
c: change in value(变化量);
d: duration(持续时间)。
ps:Elastic和Back有其他可选参数,里面都有说明。
那如何在js中利用这些算法呢?可以看到,虽然是as代码,但里面的程序是可以直接放在js里使用的。
我们可以定义一个类,把它这部分放在里面:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->var Tween = {
Quad: {
easeOut: function(t,b,c,d){
return -c *(t/=d)*(t-2) + b;
}
}
}
这样,就可以用Tween.Quad.easeOut取得这个算法了,其他算法也一样处理就行了。
接下来就可以利用这个js的Tween来做一些缓动效果了。
先通过上面的坐标实例说一下算法原理:
x轴是时间,y轴是当前值,b是y轴的初始值,x轴的初始值是0,t是当前时间。当t(x轴)逐渐增加到达d时,当前值(y轴)会到达目标值(b+c)。
想详细理解的话可以找资料看看吧(貌似跟数学关系比较大)。
下面就介绍如何使用这个Tween了,首先b、c、d三个参数(即初始值,变化量,持续时间)在缓动开始前,是需要先确定好的。
举一个简单的例子,一个div要向右缓动,left初始值是50,那么b就是50,要向右移动100,那c就是100,如果知道的是目标值,例如要向右移动到150,那就把目标值150减初始值b就是变化量c了。
至于d的设置就比较灵活,只要符合t是从0向d递增(或递减)就可以了。
d跟步长配合使用来设置持续时间,例如d设置为100,如果设置步长是1,那么从0到100就有100步,即分100次来完成这个过程,步数越多那么持续时间就越长。
至于t的变化相当于时间的变化,一般是均匀变化的,每次变化都增加一个步长,当t从0递增(或递减)到d时,缓动就结束了。
要注意的是t是从0开始的,设置步长时必须确定t确实能到达d,如果上面的步长是3,那么t就永远都到不了d了。更好的处理是当t等于或超过d之后,就停止定时器并设置当前值为目标值。
了解了Tween的使用后就可以实现动画效果了。继续上面的例子,已经确定b是50,c是100,d是100,步长是1,使用Tween.Quad.easeOut算法。那么可以用以下程序实现缓动:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->var b=50,c=100,d=100,t=0;
function Run(){
div.style.left = Math.ceil(Tween.Quad.easeOut(t,b,c,d)) + "px";
if(t<d){ t++; setTimeout(Run, 10); }
}
Run();
一个简单的缓动效果就实现了,要实现不同的缓动,只需要使用对应的Tween算法就行了,以前看来遥不可及的效果,现在这么容易就实现了(当然那些算法才是最难的地方)。
这样关于缓动的效果就介绍完了,但其实远远不止这些,我们还可以自己定义一些算法,发挥想象力,做一些好玩的效果。
<script type="text/javascript"></script>
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><input id="idClick" type="button" value="click">
<div id="test1" style="position:absolute;width:5px;height:5px;background:#333; font-size:0;"></div>
<div id="test2" style="position:absolute;width:5px;height:5px;background:#F00; font-size:0;"></div>
<script>
var Round = {
X: function(t,b,r){ return r*Math.cos(t/20)+b; },
Y: function(t,b,r){ return r*Math.sin(t/20)+b; }
}
var t=x=y=0;
document.getElementById("idClick").onclick = function(e){
document.onmousemove = function(e){
e=e||event;
x=e.clientX+document.documentElement.scrollLeft;
y=e.clientY+document.documentElement.scrollTop;
};
document.onmousemove(e);
setInterval(function(){
var iX = Math.ceil(Round.X(t,x,100)), iY = Math.ceil(Round.Y(t,y,50));
with(document.getElementById("test1").style){ left = iX + "px"; top = iY + "px"; }
with(document.getElementById("test2").style){
left = Math.ceil(Round.X(t*5,iX,25)) + "px"; top = Math.ceil(Round.Y(t*5,iY,25)) + "px";
}
t++;
}, 10);
}
</script>
完整Tween
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->var Tween = {
Linear: function(t,b,c,d){ return c*t/d + b; },
Quad: {
easeIn: function(t,b,c,d){
return c*(t/=d)*t + b;
},
easeOut: function(t,b,c,d){
return -c *(t/=d)*(t-2) + b;
},
easeInOut: function(t,b,c,d){
if ((t/=d/2) < 1) return c/2*t*t + b;
return -c/2 * ((--t)*(t-2) - 1) + b;
}
},
Cubic: {
easeIn: function(t,b,c,d){
return c*(t/=d)*t*t + b;
},
easeOut: function(t,b,c,d){
return c*((t=t/d-1)*t*t + 1) + b;
},
easeInOut: function(t,b,c,d){
if ((t/=d/2) < 1) return c/2*t*t*t + b;
return c/2*((t-=2)*t*t + 2) + b;
}
},
Quart: {
easeIn: function(t,b,c,d){
return c*(t/=d)*t*t*t + b;
},
easeOut: function(t,b,c,d){
return -c * ((t=t/d-1)*t*t*t - 1) + b;
},
easeInOut: function(t,b,c,d){
if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
return -c/2 * ((t-=2)*t*t*t - 2) + b;
}
},
Quint: {
easeIn: function(t,b,c,d){
return c*(t/=d)*t*t*t*t + b;
},
easeOut: function(t,b,c,d){
return c*((t=t/d-1)*t*t*t*t + 1) + b;
},
easeInOut: function(t,b,c,d){
if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
return c/2*((t-=2)*t*t*t*t + 2) + b;
}
},
Sine: {
easeIn: function(t,b,c,d){
return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
},
easeOut: function(t,b,c,d){
return c * Math.sin(t/d * (Math.PI/2)) + b;
},
easeInOut: function(t,b,c,d){
return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
}
},
Expo: {
easeIn: function(t,b,c,d){
return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
},
easeOut: function(t,b,c,d){
return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
},
easeInOut: function(t,b,c,d){
if (t==0) return b;
if (t==d) return b+c;
if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
}
},
Circ: {
easeIn: function(t,b,c,d){
return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
},
easeOut: function(t,b,c,d){
return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
},
easeInOut: function(t,b,c,d){
if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
}
},
Elastic: {
easeIn: function(t,b,c,d,a,p){
if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
if (!a || a < Math.abs(c)) { a=c; var s=p/4; }
else var s = p/(2*Math.PI) * Math.asin (c/a);
return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
},
easeOut: function(t,b,c,d,a,p){
if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
if (!a || a < Math.abs(c)) { a=c; var s=p/4; }
else var s = p/(2*Math.PI) * Math.asin (c/a);
return (a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b);
},
easeInOut: function(t,b,c,d,a,p){
if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5);
if (!a || a < Math.abs(c)) { a=c; var s=p/4; }
else var s = p/(2*Math.PI) * Math.asin (c/a);
if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
}
},
Back: {
easeIn: function(t,b,c,d,s){
if (s == undefined) s = 1.70158;
return c*(t/=d)*t*((s+1)*t - s) + b;
},
easeOut: function(t,b,c,d,s){
if (s == undefined) s = 1.70158;
return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
},
easeInOut: function(t,b,c,d,s){
if (s == undefined) s = 1.70158;
if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
}
},
Bounce: {
easeIn: function(t,b,c,d){
return c - Tween.Bounce.easeOut(d-t, 0, c, d) + b;
},
easeOut: function(t,b,c,d){
if ((t/=d) < (1/2.75)) {
return c*(7.5625*t*t) + b;
} else if (t < (2/2.75)) {
return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
} else if (t < (2.5/2.75)) {
return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
} else {
return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
}
},
easeInOut: function(t,b,c,d){
if (t < d/2) return Tween.Bounce.easeIn(t*2, 0, c, d) * .5 + b;
else return Tween.Bounce.easeOut(t*2-d, 0, c, d) * .5 + c*.5 + b;
}
}
}
- Tween.rar (2.2 KB)
- 下载次数: 11
发表评论
-
页面自动执行(加载)js的几种方法
2018-04-12 17:29 2524一、JS方法1.最简单的 ... -
判断横屏竖屏(三种)
2018-04-10 19:29 1设置页面竖屏或者横屏:portrait:竖屏 ... -
JS 操作Select元素
2017-09-13 18:35 428Code highlighting produced by ... -
getURL或navigateToURL弹出窗口被IE拦截的解决方法
2012-08-16 20:48 1883方法一:通过设置wmode可以解决问题:当wmode=’win ... -
window.location详细介绍
2012-08-13 14:56 1055window.location方法获取URL ... -
JS中的反斜杠转义字符作用
2012-04-13 09:57 2384转义字符是C语言中表示 ... -
怎么移除a 标签的onclick事件
2012-04-11 10:55 3056<html> <head> < ... -
js屏蔽按键
2012-04-01 16:47 1282<script type="text/java ... -
js屏蔽(禁止)键盘和鼠标功能键,如屏蔽鼠标右键,F5刷新等
2012-04-01 16:44 2473<!DOCTYPE HTML PUBLIC " ... -
Javascript 小巧门【一】
2012-03-29 15:18 1100javascript:window.history.forwa ... -
JS判断浏览器类型与版本
2012-02-07 10:38 1726在JS中判断浏览器的类型,估计是每个编辑过页面的开发人员都遇到 ... -
JS 简单的缓动效果
2012-01-31 14:07 1234<!DOCTYPE HTML> <html ... -
JS的小技巧和心得
2012-01-31 09:47 0【1】!! 只要变量没赋值,!!双感叹号都为false,只要里 ... -
Js动画(一)基础
2012-01-30 15:54 1296在再谈js拖拽(二)仿iGoogle自定义首页模块拖拽的最后, ... -
JS- IE/FireFox/Opera/Chrome读取本地XML分析
2012-01-19 14:54 3115最近在工作之余, 想用Js+css+html写一个客户端小工具 ... -
HTML5 JS API教程 本地数据库
2011-11-25 15:27 1568有了本地数据库,我们可以进行更复杂的本地数据处理。本地数据库使 ... -
js刷新页面 方法大全
2011-08-26 17:13 732一、先来看一个简单的例子: 下面以三个页面分别 ... -
AS3和JS互相调用的小技巧 【一】
2011-08-26 14:04 3768我对chm帮助手册小解: 选择“文件”>“新建”> ... -
AS3和JS互相调用的小技巧【二】
2011-08-26 13:56 17326引用AS3和JS的互相调用 ... -
页面自动跳转的几种实现方法
2010-01-10 17:54 3280引用 几秒后自动转到下一页网页代码 方法一:使用meta标签 ...
相关推荐
JavaScript Tween算法是动画效果中常用的一种技术,它用于在一段时间内平滑地改变一个或多个对象的属性。Tween,即“缓动”,在图形和游戏编程中尤其常见,用来实现平滑过渡效果,如物体的移动、旋转或颜色变化等。...
JavaScript Tween算法是用于实现平滑动画过渡的技术,它...总之,JavaScript Tween算法是实现平滑过渡动画的关键,通过理解和应用不同类型的缓动函数,我们可以创建出丰富多样的动画效果,提升用户在网页交互中的体验。
在JavaScript世界中,jsC的Tween插件为开发者提供了简单易用的API来实现这种缓动效果。下面将详细探讨Tween的核心概念、工作原理以及如何使用jsC的Tween插件。 一、Tween的概念与应用 Tween,源自英文“in-between...
JavaScript中的Tween算法可以与各种动画库结合使用,如GSAP(GreenSock Animation Platform)和Tween.js,这些库提供了丰富的缓动函数和更高级的功能,如链式调用、延迟、回调等,让开发者能更轻松地创建复杂的动画...
例如,`tween.js`是一个非常流行的JavaScript缓动库,它提供了丰富的缓动函数,如线性、平方、立方、四次方等,可以实现不同类型的缓动效果。 在实现物体碰撞缓动效果时,我们首先需要定义物体的坐标、大小、速度和...
tween.js是一个JavaScript库,专门用于创建平滑的缓动补间动画效果。它简化了在Web页面上实现动态过渡和动画的过程。缓动补间动画是动画制作中的一个重要概念,尤其是在Flash中,通过Tween类可以实现各种复杂的动画...
Tween(缓动)技术是动画设计中常用的一种方法,它能够使对象在一定时间内从一个属性值平滑过渡到另一个属性值,从而创造出流畅的动画效果。在AS3中,虽然内置的 Tween 类并不是特别强大,但有许多第三方库提供了更...
本项目利用了tween算法来实现这一效果,这是一种常见的动画算法,用于平滑地改变物体在一定时间内的属性,如位置、大小、颜色等。在网页或应用程序中,这种算法通常用于创建过渡效果,使元素的变换看起来更自然流畅...
4. **动画缓动函数**:通过Tween算法,可以实现不同类型的缓动效果,如线性、ease-in、ease-out、ease-in-out等,让动画更具吸引力。 5. **事件监听**:通过监听用户的鼠标或触摸事件,实现交互式的3D展示,如拖动...
总之,JavaScript动画算法涉及了数学、物理学和艺术设计等多个领域,通过精心设计的缓动函数和时间函数,开发者可以实现从简单到复杂的各种动态效果。理解并掌握这些算法,对于提升JavaScript编程能力,特别是前端...
1. 使用JavaScript库:比如GSAP(GreenSock Animation Platform)提供强大的Tween功能,支持复杂的动画序列和插值算法,可以轻松创建上述提到的各种效果。 2. CSS3动画:CSS3中的`transition`和`animation`属性可以...
tween.js,作为一款备受推崇的Web动画引擎,为开发者提供了强大的JavaScript库,用于创建平滑的缓动动画效果。这款开源工具以其易用性和高性能在Web开发领域广受好评。在深入探讨tween.js的核心功能和工作原理之前,...
JavaScript社区提供了许多现成的缓动函数库,如Glow或Tween.js。 3. **帧动画与requestAnimationFrame**:`requestAnimationFrame`是JavaScript中专为动画设计的API,它会在浏览器下一次重绘之前调用提供的回调函数...
在Flash开发中,缓动(Tweener)是一种常见的动画技术,用于实现平滑、自然的过渡效果。Tweener库是Flash平台上的一个高效、易用的工具,它简化了对象属性变化过程中的动画控制,使开发者可以轻松创建出各种复杂的...
`tween.js` 是一个非常受欢迎的JavaScript库,专为实现平滑的动画效果而设计。它基于优化的罗伯特·彭纳(Robert Penner)方程,使得开发者能够轻松地创建复杂的动画序列。下面将详细探讨`tween.js`及其核心概念、...
在jQuery 1.9.1版本中,动画处理功能得到了进一步的增强,其中缓动动画(Tween)是实现动画效果的核心机制。 缓动动画,也就是Tween动画,是指在动画执行过程中,动画对象的属性值在初始值和最终值之间按照某种特定...
Tween.js 是一个强大的JavaScript库,专门用于实现缓动效果,也就是平滑地过渡动画效果。缓动算法在游戏开发、用户界面设计以及许多其他需要流畅动态效果的领域中广泛使用。Tween.js 提供了一系列预定义的缓动函数,...
JavaScript补间动画是一种在网页上实现平滑动态效果的技术,它通过不断改变元素的属性(如位置、大小、颜色等)来创建出过渡动画。在本案例中,我们讨论的是一个名为"轻量级JavaScript补间动画类"的库,其设计理念...
JavaScript缓动动画演示(Tween) .htmJavaScript使用完全参考手册.chm JavaScript事件支持快速检测.htmlJavascript网页设计300例.chmJavaScript网页特效源码大全.chmjQuery API中文文档.txt jQuery Data 属性.html ...
5. 为平滑过渡,我们可以利用Tween算法中的`easeOut`函数,根据用户滑动的速度和时间来调整移动距离,模拟缓动效果。 6. 为了实现无限循环的效果,我们需要显示N+2张图片,实际上表示N张图片的轮播,通过巧妙的布局...