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