additween
Version:
Additive tweening library for smooth animations
3 lines (2 loc) • 1.98 kB
JavaScript
var n={clone:function(n){var e={};for(var t in n)e[t]=n[t];return e},reduce:function(n,e,t,i){for(var r in n)n[r]-=(e[r]-t[r])*i;return n}};function e(n,e){for(var t=0;t<e.length;t++){var i=e[t];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(n,i.key,i)}}function t(n,e,t){return e in n?Object.defineProperty(n,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):n[e]=t,n}function i(){}function r(n){return n}var o=function(){function o(e){var a=this;!function(n,e){if(!(n instanceof e))throw new TypeError("Cannot call a class as a function")}(this,o),t(this,"tween",void 0),t(this,"isTweening",void 0),t(this,"finish",void 0),t(this,"cancel",void 0);var u=0,l=null,c=null,f=[],s=e.onRender||i,w=e.stateReducer||n,d=e.onFinish||i,h=e.onCancel||i;var v=function n(){if(null!==l){var e=a.now();c=function(n){for(var e,t,i=w.clone(l),r=f.length-1;r>=0;r--)(e=f[r]).end<n||(t=(e.end-n)/e.duration,i=w.reduce(i,e.toState,e.fromState,e.easing(t)));return i}(e),s(c),!function(n){for(var e=f.length-1;e>=0;e--)if(f[e].end>=n)return!0;return!1}(e)?a.finish():u=a.scheduleAnimationFrame(n)}};this.isTweening=function(){return!!l},this.finish=function(){null!==l&&(d(l),l=null,c=null)},this.cancel=function(){null!==l&&(window.cancelAnimationFrame&&(window.cancelAnimationFrame(u),u=0),h(),l=null,c=null)},this.tween=function(n,e,t,i){var o=this.now(),a={duration:t,end:o+t,fromState:null===l?n:l,toState:e,easing:i||r};!function(n){for(var e=[],t=f.length-1;t>=0;t--)f[t].end>n&&e.push(f[t]);f=e}(o),f.push(a),l=e,u=this.scheduleAnimationFrame(v)}}var a,u,l;return a=o,(u=[{key:"scheduleAnimationFrame",value:function(n){return window.requestAnimationFrame(n)}},{key:"now",value:function(){return window.performance&&window.performance.now?window.performance.now():Date.now?Date.now():(new Date).getTime()}}])&&e(a.prototype,u),l&&e(a,l),o}();export{o as AdditiveTweening,n as PlainObjectReducer};
//# sourceMappingURL=additween.mjs.map