224 lines
5.4 KiB
JavaScript
224 lines
5.4 KiB
JavaScript
|
if(!dojo._hasResource["dojox.fx.easing"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
|
||
|
dojo._hasResource["dojox.fx.easing"] = true;
|
||
|
dojo.provide("dojox.fx.easing");
|
||
|
/*
|
||
|
dojox.fx.easing is in this little file so you don't need dojox.fx to utilize this.
|
||
|
dojox.fx has a lot of fun animations, but this module is optimized for size ...
|
||
|
|
||
|
*/
|
||
|
dojox.fx.easing = {
|
||
|
// summary: Collection of easing functions to use beyond the default dojo._defaultEasing
|
||
|
//
|
||
|
// description:
|
||
|
// Easing functions are used to manipulate the iteration through
|
||
|
// an _Animation's _Line. _Line being the properties of an Animation,
|
||
|
// and the easing function progresses through that Line determing
|
||
|
// how quickly (or slowly) it should go. Or more accurately: modify
|
||
|
// the value of the _Line based on the percentage of animation completed.
|
||
|
//
|
||
|
// example:
|
||
|
// | dojo.require("dojox.fx.easing");
|
||
|
// | var anim = dojo.fadeOut({
|
||
|
// | node: 'node',
|
||
|
// | duration: 2000,
|
||
|
// | easing: dojox.fx.easing.quadIn
|
||
|
// | }).play();
|
||
|
//
|
||
|
|
||
|
linear: function(/* Decimal? */n){
|
||
|
// summary: A linear easing function
|
||
|
return n;
|
||
|
},
|
||
|
|
||
|
quadIn: function(/* Decimal? */n){
|
||
|
return Math.pow(n, 2);
|
||
|
},
|
||
|
|
||
|
quadOut: function(/* Decimal? */n){
|
||
|
return n * (n-2) * -1;
|
||
|
},
|
||
|
|
||
|
quadInOut: function(/* Decimal? */n){
|
||
|
n=n*2;
|
||
|
if(n<1){ return Math.pow(n, 2) / 2; }
|
||
|
return -1 * ((--n)*(n-2) - 1) / 2;
|
||
|
},
|
||
|
|
||
|
cubicIn: function(/* Decimal? */n){
|
||
|
return Math.pow(n, 3);
|
||
|
},
|
||
|
|
||
|
cubicOut: function(/* Decimal? */n){
|
||
|
return Math.pow(n-1, 3) + 1;
|
||
|
},
|
||
|
|
||
|
cubicInOut: function(/* Decimal? */n){
|
||
|
n=n*2;
|
||
|
if(n<1){ return Math.pow(n, 3) / 2; }
|
||
|
n-=2;
|
||
|
return (Math.pow(n, 3) + 2) / 2;
|
||
|
},
|
||
|
|
||
|
quartIn: function(/* Decimal? */n){
|
||
|
return Math.pow(n, 4);
|
||
|
},
|
||
|
|
||
|
quartOut: function(/* Decimal? */n){
|
||
|
return -1 * (Math.pow(n-1, 4) - 1);
|
||
|
},
|
||
|
|
||
|
quartInOut: function(/* Decimal? */n){
|
||
|
n=n*2;
|
||
|
if(n<1){ return Math.pow(n, 4) / 2; }
|
||
|
n-=2;
|
||
|
return -1/2 * (Math.pow(n, 4) - 2);
|
||
|
},
|
||
|
|
||
|
quintIn: function(/* Decimal? */n){
|
||
|
return Math.pow(n, 5);
|
||
|
},
|
||
|
|
||
|
quintOut: function(/* Decimal? */n){
|
||
|
return Math.pow(n-1, 5) + 1;
|
||
|
},
|
||
|
|
||
|
quintInOut: function(/* Decimal? */n){
|
||
|
n=n*2;
|
||
|
if(n<1){ return Math.pow(n, 5) / 2; };
|
||
|
n-=2;
|
||
|
return (Math.pow(n, 5) + 2) / 2;
|
||
|
},
|
||
|
|
||
|
sineIn: function(/* Decimal? */n){
|
||
|
return -1 * Math.cos(n * (Math.PI/2)) + 1;
|
||
|
},
|
||
|
|
||
|
sineOut: function(/* Decimal? */n){
|
||
|
return Math.sin(n * (Math.PI/2));
|
||
|
},
|
||
|
|
||
|
sineInOut: function(/* Decimal? */n){
|
||
|
return -1 * (Math.cos(Math.PI*n) - 1) / 2;
|
||
|
},
|
||
|
|
||
|
expoIn: function(/* Decimal? */n){
|
||
|
return (n==0) ? 0 : Math.pow(2, 10 * (n - 1));
|
||
|
},
|
||
|
|
||
|
expoOut: function(/* Decimal? */n){
|
||
|
return (n==1) ? 1 : (-1 * Math.pow(2, -10 * n) + 1);
|
||
|
},
|
||
|
|
||
|
expoInOut: function(/* Decimal? */n){
|
||
|
if(n==0){ return 0; }
|
||
|
if(n==1){ return 1; }
|
||
|
n = n*2;
|
||
|
if(n<1){ return Math.pow(2, 10 * (n-1)) / 2; }
|
||
|
--n;
|
||
|
return (-1 * Math.pow(2, -10 * n) + 2) / 2;
|
||
|
},
|
||
|
|
||
|
circIn: function(/* Decimal? */n){
|
||
|
return -1 * (Math.sqrt(1 - Math.pow(n, 2)) - 1);
|
||
|
},
|
||
|
|
||
|
circOut: function(/* Decimal? */n){
|
||
|
n = n-1;
|
||
|
return Math.sqrt(1 - Math.pow(n, 2));
|
||
|
},
|
||
|
|
||
|
circInOut: function(/* Decimal? */n){
|
||
|
n = n*2;
|
||
|
if(n<1){ return -1/2 * (Math.sqrt(1 - Math.pow(n, 2)) - 1); }
|
||
|
n-=2;
|
||
|
return 1/2 * (Math.sqrt(1 - Math.pow(n, 2)) + 1);
|
||
|
},
|
||
|
|
||
|
backIn: function(/* Decimal? */n){
|
||
|
var s = 1.70158;
|
||
|
return Math.pow(n, 2) * ((s+1)*n - s);
|
||
|
},
|
||
|
|
||
|
backOut: function(/* Decimal? */n){
|
||
|
// summary: an easing function that pops past the range briefly, and
|
||
|
// slowly comes back.
|
||
|
n = n - 1;
|
||
|
var s = 1.70158;
|
||
|
return Math.pow(n, 2) * ((s + 1) * n + s) + 1;
|
||
|
},
|
||
|
|
||
|
backInOut: function(/* Decimal? */n){
|
||
|
var s = 1.70158 * 1.525;
|
||
|
n = n*2;
|
||
|
if(n < 1){ return (Math.pow(n, 2)*((s+1)*n - s))/2; }
|
||
|
n-=2;
|
||
|
return (Math.pow(n, 2)*((s+1)*n + s) + 2)/2;
|
||
|
},
|
||
|
|
||
|
elasticIn: function(/* Decimal? */n){
|
||
|
if(n==0){ return 0; }
|
||
|
if(n==1){ return 1; }
|
||
|
var p = .3;
|
||
|
var s = p/4;
|
||
|
n = n - 1;
|
||
|
return -1 * Math.pow(2,10*n) * Math.sin((n-s)*(2*Math.PI)/p);
|
||
|
},
|
||
|
|
||
|
elasticOut: function(/* Decimal? */n){
|
||
|
// summary: An easing function that elasticly snaps around the target value, near the end of the Animation
|
||
|
if(n==0) return 0;
|
||
|
if(n==1) return 1;
|
||
|
var p = .3;
|
||
|
var s = p/4;
|
||
|
return Math.pow(2,-10*n) * Math.sin((n-s)*(2*Math.PI)/p) + 1;
|
||
|
},
|
||
|
|
||
|
elasticInOut: function(/* Decimal? */n){
|
||
|
// summary: An easing function that elasticly snaps around the value, near the beginning and end of the Animation
|
||
|
if(n==0) return 0;
|
||
|
n = n*2;
|
||
|
if(n==2) return 1;
|
||
|
var p = .3*1.5;
|
||
|
var s = p/4;
|
||
|
if(n<1){
|
||
|
n-=1;
|
||
|
return -.5*(Math.pow(2,10*n) * Math.sin((n-s)*(2*Math.PI)/p));
|
||
|
}
|
||
|
n-=1;
|
||
|
return .5*(Math.pow(2,-10*n) * Math.sin((n-s)*(2*Math.PI)/p)) + 1;
|
||
|
},
|
||
|
|
||
|
bounceIn: function(/* Decimal? */n){
|
||
|
// summary: An easing function that "bounces" near the beginning of an Animation
|
||
|
return (1 - dojox.fx.easing.bounceOut(1-n)); // Decimal
|
||
|
},
|
||
|
|
||
|
bounceOut: function(/* Decimal? */n){
|
||
|
// summary: An easing function that "bounces" near the end of an Animation
|
||
|
var s=7.5625;
|
||
|
var p=2.75;
|
||
|
var l;
|
||
|
if(n < (1 / p)){
|
||
|
l = s*Math.pow(n, 2);
|
||
|
}else if(n < (2 / p)){
|
||
|
n -= (1.5 / p);
|
||
|
l = s * Math.pow(n, 2) + .75;
|
||
|
}else if(n < (2.5 / p)){
|
||
|
n -= (2.25 / p);
|
||
|
l = s * Math.pow(n, 2) + .9375;
|
||
|
}else{
|
||
|
n -= (2.625 / p);
|
||
|
l = s * Math.pow(n, 2) + .984375;
|
||
|
}
|
||
|
return l;
|
||
|
},
|
||
|
|
||
|
bounceInOut: function(/* Decimal? */n){
|
||
|
// summary: An easing function that "bounces" at the beginning and end of the Animation
|
||
|
if(n<0.5){ return dojox.fx.easing.bounceIn(n*2) / 2; }
|
||
|
return (dojox.fx.easing.bounceOut(n*2-1) / 2) + 0.5; // Decimal
|
||
|
}
|
||
|
};
|
||
|
|
||
|
}
|