es6-easing
Version:
Robert Penner's easing equations as an ES6 module
288 lines (244 loc) • 9.14 kB
JavaScript
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
typeof define === 'function' && define.amd ? define(['exports'], factory) :
(global = global || self, factory(global.ES6Easing = {}));
}(this, function (exports) { 'use strict';
const easingFunctions = {
easeInQuad( pos ) {
return Math.pow( pos, 2 );
},
easeOutQuad( pos ) {
return -( Math.pow( ( pos - 1 ), 2 ) - 1 );
},
easeInOutQuad( pos ) {
if ( ( pos /= 0.5 ) < 1 ) return 0.5 * Math.pow( pos,2 );
return -0.5 * ( ( pos -= 2 ) * pos - 2 );
},
easeInCubic( pos ) {
return Math.pow( pos, 3 );
},
easeOutCubic( pos ) {
return ( Math.pow( ( pos - 1 ), 3 ) + 1 );
},
easeInOutCubic( pos ) {
if ( ( pos /= 0.5 ) < 1 ) return 0.5 * Math.pow( pos,3 );
return 0.5 * ( Math.pow( ( pos - 2 ),3 ) + 2 );
},
easeInQuart( pos ) {
return Math.pow( pos, 4 );
},
easeOutQuart( pos ) {
return -( Math.pow( ( pos - 1 ), 4 ) - 1 );
},
easeInOutQuart( pos ) {
if ( ( pos /= 0.5 ) < 1 ) return 0.5 * Math.pow( pos,4 );
return -0.5 * ( ( pos -= 2 ) * Math.pow( pos,3 ) - 2 );
},
easeInQuint( pos ) {
return Math.pow( pos, 5 );
},
easeOutQuint( pos ) {
return ( Math.pow( ( pos - 1 ), 5 ) + 1 );
},
easeInOutQuint( pos ) {
if ( ( pos /= 0.5 ) < 1 ) return 0.5 * Math.pow( pos,5 );
return 0.5 * ( Math.pow( ( pos - 2 ),5 ) + 2 );
},
easeInSine( pos ) {
return -Math.cos( pos * ( Math.PI / 2 ) ) + 1;
},
easeOutSine( pos ) {
return Math.sin( pos * ( Math.PI / 2 ) );
},
easeInOutSine( pos ) {
return ( -0.5 * ( Math.cos( Math.PI * pos ) - 1 ) );
},
easeInExpo( pos ) {
return ( pos === 0 ) ? 0 : Math.pow( 2, 10 * ( pos - 1 ) );
},
easeOutExpo( pos ) {
return ( pos === 1 ) ? 1 : -Math.pow( 2, -10 * pos ) + 1;
},
easeInOutExpo( pos ) {
if( pos === 0 ) return 0;
if( pos === 1 ) return 1;
if( ( pos /= 0.5 ) < 1 ) return 0.5 * Math.pow( 2,10 * ( pos - 1 ) );
return 0.5 * ( -Math.pow( 2, -10 * --pos ) + 2 );
},
easeInCirc( pos ) {
return -( Math.sqrt( 1 - ( pos * pos ) ) - 1 );
},
easeOutCirc( pos ) {
return Math.sqrt( 1 - Math.pow( ( pos - 1 ), 2 ) );
},
easeInOutCirc( pos ) {
if( ( pos /= 0.5 ) < 1 ) return -0.5 * ( Math.sqrt( 1 - pos * pos ) - 1 );
return 0.5 * ( Math.sqrt( 1 - ( pos -= 2 ) * pos ) + 1 );
},
easeOutBounce( pos ) {
if ( ( pos ) < ( 1 / 2.75 ) ) {
return ( 7.5625 * pos * pos );
} else if ( pos < ( 2 / 2.75 ) ) {
return ( 7.5625 * ( pos -= ( 1.5 / 2.75 ) ) * pos + 0.75 );
} else if ( pos < ( 2.5 / 2.75 ) ) {
return ( 7.5625 * ( pos -= ( 2.25 / 2.75 ) ) * pos + 0.9375 );
} else {
return ( 7.5625 * ( pos -= ( 2.625 / 2.75 ) ) * pos + 0.984375 );
}
},
easeInBack( pos ) {
var s = 1.70158;
return ( pos ) * pos * ( ( s + 1 ) * pos - s );
},
easeOutBack( pos ) {
var s = 1.70158;
return ( pos = pos - 1 ) * pos * ( ( s + 1 ) * pos + s ) + 1;
},
easeInOutBack( pos ) {
var s = 1.70158;
if( ( pos /= 0.5 ) < 1 ) return 0.5 * ( pos * pos * ( ( ( s *= ( 1.525 ) ) + 1 ) * pos - s ) );
return 0.5 * ( ( pos -= 2 ) * pos * ( ( ( s *= ( 1.525 ) ) + 1 ) * pos + s ) + 2 );
},
elastic( pos ) {
return -1 * Math.pow( 4,-8 * pos ) * Math.sin( ( pos * 6 - 1 ) * ( 2 * Math.PI ) / 2 ) + 1;
},
swingFromTo( pos ) {
var s = 1.70158;
return ( ( pos /= 0.5 ) < 1 ) ? 0.5 * ( pos * pos * ( ( ( s *= ( 1.525 ) ) + 1 ) * pos - s ) ) :
0.5 * ( ( pos -= 2 ) * pos * ( ( ( s *= ( 1.525 ) ) + 1 ) * pos + s ) + 2 );
},
swingFrom( pos ) {
var s = 1.70158;
return pos * pos * ( ( s + 1 ) * pos - s );
},
swingTo( pos ) {
var s = 1.70158;
return ( pos -= 1 ) * pos * ( ( s + 1 ) * pos + s ) + 1;
},
bounce( pos ) {
if ( pos < ( 1 / 2.75 ) ) {
return ( 7.5625 * pos * pos );
} else if ( pos < ( 2 / 2.75 ) ) {
return ( 7.5625 * ( pos -= ( 1.5 / 2.75 ) ) * pos + 0.75 );
} else if ( pos < ( 2.5 / 2.75 ) ) {
return ( 7.5625 * ( pos -= ( 2.25 / 2.75 ) ) * pos + 0.9375 );
} else {
return ( 7.5625 * ( pos -= ( 2.625 / 2.75 ) ) * pos + 0.984375 );
}
},
bouncePast( pos ) {
if ( pos < ( 1 / 2.75 ) ) {
return ( 7.5625 * pos * pos );
} else if ( pos < ( 2 / 2.75 ) ) {
return 2 - ( 7.5625 * ( pos -= ( 1.5 / 2.75 ) ) * pos + 0.75 );
} else if ( pos < ( 2.5 / 2.75 ) ) {
return 2 - ( 7.5625 * ( pos -= ( 2.25 / 2.75 ) ) * pos + 0.9375 );
} else {
return 2 - ( 7.5625 * ( pos -= ( 2.625 / 2.75 ) ) * pos + 0.984375 );
}
},
easeFromTo( pos ) {
if ( ( pos /= 0.5 ) < 1 ) return 0.5 * Math.pow( pos,4 );
return -0.5 * ( ( pos -= 2 ) * Math.pow( pos,3 ) - 2 );
},
easeFrom( pos ) {
return Math.pow( pos,4 );
},
easeTo( pos ) {
return Math.pow( pos,0.25 );
},
easeInQuadOutQuint( pos ) {
// InOutQuad
if ( ( pos /= 0.5 ) < 1 ) return 0.5 * Math.pow( pos,2 );
// return -0.5 * ( ( pos -= 2 ) * pos - 2 );
// InOutQuint
// if ( ( pos /= 0.5 ) < 1 ) return 0.5 * Math.pow( pos,5 );
return 0.5 * ( Math.pow( ( pos - 2 ),5 ) + 2 );
},
easeInQuadOutExpo( pos ) {
if( pos === 0 ) return 0;
if( pos === 1 ) return 1;
// InOutQuad
if ( ( pos /= 0.5 ) < 1 ) return 0.5 * Math.pow( pos,2 );
// return -0.5 * ( ( pos -= 2 ) * pos - 2 );
// InOutExpo
// if( ( pos /= 0.5 ) < 1 ) return 0.5 * Math.pow( 2,10 * ( pos - 1 ) );
return 0.5 * ( -Math.pow( 2, -10 * --pos ) + 2 );
},
};
const {
easeInQuad,
easeOutQuad,
easeInOutQuad,
easeInCubic,
easeOutCubic,
easeInOutCubic,
easeInQuart,
easeOutQuart,
easeInOutQuart,
easeInQuint,
easeOutQuint,
easeInOutQuint,
easeInSine,
easeOutSine,
easeInOutSine,
easeInExpo,
easeOutExpo,
easeInOutExpo,
easeInCirc,
easeOutCirc,
easeInOutCirc,
easeOutBounce,
easeInBack,
easeOutBack,
easeInOutBack,
elastic,
swingFromTo,
swingFrom,
swingTo,
bounce,
bouncePast,
easeFromTo,
easeFrom,
easeTo,
easeInQuadOutQuint,
easeInQuadOutExpo
} = easingFunctions;
exports.easeInQuad = easeInQuad;
exports.easeOutQuad = easeOutQuad;
exports.easeInOutQuad = easeInOutQuad;
exports.easeInCubic = easeInCubic;
exports.easeOutCubic = easeOutCubic;
exports.easeInOutCubic = easeInOutCubic;
exports.easeInQuart = easeInQuart;
exports.easeOutQuart = easeOutQuart;
exports.easeInOutQuart = easeInOutQuart;
exports.easeInQuint = easeInQuint;
exports.easeOutQuint = easeOutQuint;
exports.easeInOutQuint = easeInOutQuint;
exports.easeInSine = easeInSine;
exports.easeOutSine = easeOutSine;
exports.easeInOutSine = easeInOutSine;
exports.easeInExpo = easeInExpo;
exports.easeOutExpo = easeOutExpo;
exports.easeInOutExpo = easeInOutExpo;
exports.easeInCirc = easeInCirc;
exports.easeOutCirc = easeOutCirc;
exports.easeInOutCirc = easeInOutCirc;
exports.easeOutBounce = easeOutBounce;
exports.easeInBack = easeInBack;
exports.easeOutBack = easeOutBack;
exports.easeInOutBack = easeInOutBack;
exports.elastic = elastic;
exports.swingFromTo = swingFromTo;
exports.swingFrom = swingFrom;
exports.swingTo = swingTo;
exports.bounce = bounce;
exports.bouncePast = bouncePast;
exports.easeFromTo = easeFromTo;
exports.easeFrom = easeFrom;
exports.easeTo = easeTo;
exports.easeInQuadOutQuint = easeInQuadOutQuint;
exports.easeInQuadOutExpo = easeInQuadOutExpo;
Object.defineProperty(exports, '__esModule', { value: true });
}));