UNPKG

dojo

Version:

Dojo core is a powerful, lightweight library that makes common tasks quicker and easier. Animate elements, manipulate the DOM, and query with easy CSS syntax, all without sacrificing performance.

277 lines (240 loc) 7.68 kB
define(["../_base/lang"], function(lang){ // module: // dojo/fx/easing var easingFuncs = { // summary: // Collection of easing functions to use beyond the default // `dojo._defaultEasing` function. // description: // Easing functions are used to manipulate the iteration through // an `dojo.Animation`s _Line. _Line being the properties of an Animation, // and the easing function progresses through that Line determining // how quickly (or slowly) it should go. Or more accurately: modify // the value of the _Line based on the percentage of animation completed. // // All functions follow a simple naming convention of "ease type" + "when". // If the name of the function ends in Out, the easing described appears // towards the end of the animation. "In" means during the beginning, // and InOut means both ranges of the Animation will applied, both // beginning and end. // // One does not call the easing function directly, it must be passed to // the `easing` property of an animation. // example: // | dojo.require("dojo.fx.easing"); // | var anim = dojo.fadeOut({ // | node: 'node', // | duration: 2000, // | // note there is no () // | easing: dojo.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){ // summary: // An easing function that starts away from the target, // and quickly accelerates towards the end value. // // Use caution when the easing will cause values to become // negative as some properties cannot be set to negative values. 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. // description: // An easing function that pops past the range briefly, and slowly comes back. // // Use caution when the easing will cause values to become negative as some // properties cannot be set to negative values. n = n - 1; var s = 1.70158; return Math.pow(n, 2) * ((s + 1) * n + s) + 1; }, backInOut: function(/* Decimal? */n){ // summary: // An easing function combining the effects of `backIn` and `backOut` // description: // An easing function combining the effects of `backIn` and `backOut`. // Use caution when the easing will cause values to become negative // as some properties cannot be set to negative values. 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){ // summary: // An easing function the elastically snaps from the start value // description: // An easing function the elastically snaps from the start value // // Use caution when the elasticity will cause values to become negative // as some properties cannot be set to negative values. if(n == 0 || n == 1){ return n; } 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 // description: // An easing function that elasticly snaps around the target value, // near the end of the Animation // // Use caution when the elasticity will cause values to become // negative as some properties cannot be set to negative values. if(n==0 || n == 1){ return n; } 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. // description: // An easing function that elasticly snaps around the value, near // the beginning and end of the Animation. // // Use caution when the elasticity will cause values to become // negative as some properties cannot be set to negative values. 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 - easingFuncs.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 easingFuncs.bounceIn(n * 2) / 2; } return (easingFuncs.bounceOut(n * 2 - 1) / 2) + 0.5; // Decimal } }; lang.setObject("dojo.fx.easing", easingFuncs); return easingFuncs; });