87,996
社区成员




- static function easeOut (t:Number, b:Number, c:Number, d:Number):Number {
- return -c * ((t=t/d-1)*t*t*t - 1) + b;
- }
这是as代码,四个参数分别是:- var Tween = {
- Quad: {
- easeOut: function(t,b,c,d){
- return -c *(t/=d)*(t-2) + b;
- }
- }
- }
这样,就可以用Tween.Quad.easeOut取得这个算法了,其他算法也一样处理就行了。- 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算法就行了,以前看来遥不可及的效果,现在这么容易就实现了(当然那些算法才是最难的地方)。
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
- <title>无标题文档</title>
- </head>
- <body>
- <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>
- </body>
- </html>