2 Script: Fx.Transitions.js
3 Effects transitions, to be used with all the effects.
9 Easing Equations by Robert Penner, <http://www.robertpenner.com/easing/>, modified & optimized to be used with mootools.
14 A collection of tweening transitions for use with the <Fx.Base> classes.
17 >//Elastic.easeOut with default values:
18 >new Fx.Style('margin', {transition: Fx.Transitions.Elastic.easeOut});
19 >//Elastic.easeOut with user-defined value for elasticity.
20 > var myTransition = new Fx.Transition(Fx.Transitions.Elastic, 3);
21 >new Fx.Style('margin', {transition: myTransition.easeOut});
24 http://www.robertpenner.com/easing/
27 Fx.Transition = function(transition, params){
28 params = params || [];
29 if ($type(params) != 'array') params = [params];
30 return $extend(transition, {
31 easeIn: function(pos){
32 return transition(pos, params);
34 easeOut: function(pos){
35 return 1 - transition(1 - pos, params);
37 easeInOut: function(pos){
38 return (pos <= 0.5) ? transition(2 * pos, params) / 2 : (2 - transition(2 * (1 - pos), params)) / 2;
43 Fx.Transitions = new Abstract({
47 displays a linear transition.
59 Fx.Transitions.extend = function(transitions){
60 for (var transition in transitions){
61 Fx.Transitions[transition] = new Fx.Transition(transitions[transition]);
62 Fx.Transitions.compat(transition);
66 Fx.Transitions.compat = function(transition){
67 ['In', 'Out', 'InOut'].each(function(easeType){
68 Fx.Transitions[transition.toLowerCase() + easeType] = Fx.Transitions[transition]['ease' + easeType];
72 Fx.Transitions.extend({
76 displays a quadratic transition. Must be used as Quad.easeIn or Quad.easeOut or Quad.easeInOut
86 displays a cubicular transition. Must be used as Cubic.easeIn or Cubic.easeOut or Cubic.easeInOut
96 displays a quartetic transition. Must be used as Quart.easeIn or Quart.easeOut or Quart.easeInOut
106 displays a quintic transition. Must be used as Quint.easeIn or Quint.easeOut or Quint.easeInOut
116 Used to generate Quad, Cubic, Quart and Quint.
124 return Math.pow(p, x[0] || 6);
129 displays a exponential transition. Must be used as Expo.easeIn or Expo.easeOut or Expo.easeInOut
136 return Math.pow(2, 8 * (p - 1));
141 displays a circular transition. Must be used as Circ.easeIn or Circ.easeOut or Circ.easeInOut
148 return 1 - Math.sin(Math.acos(p));
154 displays a sineousidal transition. Must be used as Sine.easeIn or Sine.easeOut or Sine.easeInOut
161 return 1 - Math.sin((1 - p) * Math.PI / 2);
166 makes the transition go back, then all forth. Must be used as Back.easeIn or Back.easeOut or Back.easeInOut
172 Back: function(p, x){
174 return Math.pow(p, 2) * ((x + 1) * p - x);
179 makes the transition bouncy. Must be used as Bounce.easeIn or Bounce.easeOut or Bounce.easeInOut
187 for (var a = 0, b = 1; 1; a += b, b /= 2){
188 if (p >= (7 - 4 * a) / 11){
189 value = - Math.pow((11 - 6 * a - 11 * p) / 4, 2) + b * b;
198 Elastic curve. Must be used as Elastic.easeIn or Elastic.easeOut or Elastic.easeInOut
204 Elastic: function(p, x){
205 return Math.pow(2, 10 * --p) * Math.cos(20 * p * Math.PI * (x[0] || 1) / 3);
210 ['Quad', 'Cubic', 'Quart', 'Quint'].each(function(transition, i){
211 Fx.Transitions[transition] = new Fx.Transition(function(p){
212 return Math.pow(p, [i + 2]);
214 Fx.Transitions.compat(transition);