javascript動畫演算法執行個體分析_javascript技巧

來源:互聯網
上載者:User

本文執行個體講述了javascript動畫演算法。分享給大家供大家參考。具體如下:

動畫演算法

Linear:無緩動效果(勻速運動);
Quadratic:二次方的緩動;
Cubic:三次方的緩動
Quartic:四次方的緩動;
Quintic:五次方的緩動;
Sinusoidal:正弦曲線的緩動;
Exponential:指數曲線的緩動;
Circular:圓形曲線的緩動;
Elastic:指數衰減的正弦曲線緩動;
Back:超過範圍的三次方緩動);
Bounce:指數衰減的反彈緩動。

每個效果都分三個緩動方式(方法),分別是:

easeIn:從0開始加速的運動;
easeOut:減速到0的運動;
easeInOut:前半段從0開始加速,後半段減速到0的運動。

函數的四個參數分別代表:

t--- current time(目前時間);
b--- beginning value(初始值);
c--- change in value(變化量);
d---duration(期間)

運算的結果就是當前的運動路程。

Tween.js如下:

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;  } }}

希望本文所述對大家的javascript程式設計有所協助。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.