/** * @class Ext.draw.TimingFunctions * @singleton * * Singleton that provides easing functions for use in sprite animations. */Ext.define('Ext.draw.TimingFunctions', function() { var pow = Math.pow, sin = Math.sin, cos = Math.cos, sqrt = Math.sqrt, pi = Math.PI, poly = ['quad', 'cube', 'quart', 'quint'], easings = { pow: function(p, x) { return pow(p, x || 6); }, expo: function(p) { return pow(2, 8 * (p - 1)); }, circ: function(p) { return 1 - sqrt(1 - p * p); }, sine: function(p) { return 1 - sin((1 - p) * pi / 2); }, back: function(p, n) { n = n || 1.616; return p * p * ((n + 1) * p - n); }, bounce: function(p) { var a, b; // eslint-disable-next-line no-constant-condition for (a = 0, b = 1; 1; a += b, b /= 2) { if (p >= (7 - 4 * a) / 11) { return b * b - pow((11 - 6 * a - 11 * p) / 4, 2); } } }, elastic: function(p, x) { return pow(2, 10 * --p) * cos(20 * p * pi * (x || 1) / 3); } }, easingsMap = {}, name, len, i; // Create polynomial easing equations. function createPoly(times) { return function(p) { return pow(p, times); }; } function addEasing(name, easing) { easingsMap[name + 'In'] = function(pos) { return easing(pos); }; easingsMap[name + 'Out'] = function(pos) { return 1 - easing(1 - pos); }; easingsMap[name + 'InOut'] = function(pos) { return (pos <= 0.5) ? easing(2 * pos) / 2 : (2 - easing(2 * (1 - pos))) / 2; }; } for (i = 0, len = poly.length; i < len; ++i) { easings[poly[i]] = createPoly(i + 2); } for (name in easings) { addEasing(name, easings[name]); } // Add linear interpolator. easingsMap.linear = Ext.identityFn; // Add aliases for quad easings. easingsMap.easeIn = easingsMap.quadIn; easingsMap.easeOut = easingsMap.quadOut; easingsMap.easeInOut = easingsMap.quadInOut; return { singleton: true, easingMap: easingsMap }; }, function(Cls) { Ext.apply(Cls, Cls.easingMap);});