码桶
发现社区成员的开源项目
Animation-CU6YFe7Y.js8.7 KB
import{ag as D}from"./index-GWuvg2UH.js";var L=4,R=.001,U=1e-7,Q=10,b=11,T=1/(b-1),K=typeof Float32Array=="function";function z(s,t){return 1-3*t+3*s}function N(s,t){return 3*t-6*s}function k(s){return 3*s}function w(s,t,e){return((z(t,e)*s+N(t,e))*s+k(t))*s}function x(s,t,e){return 3*z(t,e)*s*s+2*N(t,e)*s+k(t)}function W(s,t,e,i,n){var r,o,u=0;do o=t+(e-t)/2,r=w(o,i,n)-s,r>0?e=o:t=o;while(Math.abs(r)>U&&++u<Q);return o}function q(s,t,e,i){for(var n=0;n<L;++n){var r=x(t,e,i);if(r===0)return t;var o=w(t,e,i)-s;t-=o/r}return t}function Z(s){return s}var H=function(t,e,i,n){if(!(0<=t&&t<=1&&0<=i&&i<=1))throw new Error("bezier x values must be in [0, 1] range");if(t===e&&i===n)return Z;for(var r=K?new Float32Array(b):new Array(b),o=0;o<b;++o)r[o]=w(o*T,t,i);function u(f){for(var l=0,a=1,c=b-1;a!==c&&r[a]<=f;++a)l+=T;--a;var O=(f-r[a])/(r[a+1]-r[a]),m=l+O*T,h=x(m,t,i);return h>=R?q(f,m,t,i):h===0?m:W(f,l,l+T,t,i)}return function(l){return l===0?0:l===1?1:w(u(l),e,n)}};const M=D(H);function E(s,t,e){return Math.min(Math.max(s,t),e)}function J(s){const t=/\(([^)]+)\)/.exec(s);return t?t[1].split(",").map(e=>parseFloat(e)):[]}function I(){let s=arguments.length>0&&arguments[0]!==void 0?arguments[0]:1,t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:.5;const e=E(s,1,10),i=E(t,.1,2);return n=>n===0||n===1?n:-e*Math.pow(2,10*(n-1))*Math.sin((n-1-i/(Math.PI*2)*Math.asin(1/e))*(Math.PI*2)/i)}const C=(()=>{const s=["Quad","Cubic","Quart","Quint","Sine","Expo","Circ","Back","Elastic"],t={In:[[.55,.085,.68,.53],[.55,.055,.675,.19],[.895,.03,.685,.22],[.755,.05,.855,.06],[.47,0,.745,.715],[.95,.05,.795,.035],[.6,.04,.98,.335],[.6,-.28,.735,.045],I],Out:[[.25,.46,.45,.94],[.215,.61,.355,1],[.165,.84,.44,1],[.23,1,.32,1],[.39,.575,.565,1],[.19,1,.22,1],[.075,.82,.165,1],[.175,.885,.32,1.275],(i,n)=>r=>1-I(i,n)(1-r)],InOut:[[.455,.03,.515,.955],[.645,.045,.355,1],[.77,0,.175,1],[.86,0,.07,1],[.445,.05,.55,.95],[1,0,0,1],[.785,.135,.15,.86],[.68,-.55,.265,1.55],(i,n)=>r=>r<.5?I(i,n)(r*2)/2:1-I(i,n)(r*-2+2)/2]},e={linear:[.25,.25,.75,.75]};for(const i of Object.keys(t))t[i].forEach((n,r)=>{e["ease"+i+s[r]]=n});return e})();function F(s){if(typeof s=="function")return s;!s||typeof s!="string"?s="linear":s=s.trim();let t=s.split("(")[0];const e=J(s);let i;return t==="cubic-bezier"||t==="cubicBezier"?M(...e.length?e:C.linear):((!t||typeof t!="string"||typeof t=="string"&&C[t]==null)&&(t="linear"),i=C[t],typeof i=="function"?i(...e):e.length?M(...e):M(...i))}class ${constructor(){this._eventMap=new Map}on(t,e){return t&&typeof e=="function"&&(this._eventMap.has(t)||this._eventMap.set(t,[]),this._eventMap.get(t).push(e)),this}once(t,e){var i=this;if(t&&typeof e=="function"){const n=function(){e(...arguments),i.off(t,n)};this.on(t,n)}}off(t,e){if(t)if(typeof e=="function"){const i=this._eventMap.get(t);if(Array.isArray(i)&&i.length){let n=-1;for(;(n=i.findIndex(r=>r===e))>-1;)i.splice(n,1)}}else e==null&&this._eventMap.delete(t);return this}emit(t){for(var e=arguments.length,i=new Array(e>1?e-1:0),n=1;n<e;n++)i[n-1]=arguments[n];return this._eventMap.has(t)?(this._eventMap.get(t).forEach(r=>r(...i)),!0):!1}}function S(s){return!!(s&&typeof s=="object"&&(s.duration>0||typeof s.easing=="string"||typeof s.easing=="function"))}function Y(s,t,e,i,n){for(const r of Object.keys(t)){const o=t[r],u=typeof o=="number"?o:o.val;if(!(typeof o=="object"&&o.done)){if(S(o)&&i&&n&&o.duration){if(o.duration+i<=n||u!==s[r])return!1}else if(typeof e[r]=="number"&&e[r]!==0)return!1;if(s[r]!==u)return!1}}return!0}function v(s){const t={};for(const e in s)Object.prototype.hasOwnProperty.call(s,e)&&(t[e]=typeof s[e]=="number"?s[e]:s[e].val);return t}const _=[0,0];function A(s,t,e,i,n,r,o){const u=-n*(t-i),f=-r*e,l=u+f,a=e+l*s,c=t+a*s;return Math.abs(a)<o&&Math.abs(c-i)<o?(_[0]=i,_[1]=0,_):(_[0]=c,_[1]=a,_)}function G(s){const t={},e=s&&Object.keys(s)||[];for(const i of e)t[i]=0;return t}const X={default:{tension:170,friction:26}},tt=Object.assign(Object.assign({},X.default),{precision:.01});function et(s){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(S(t)){const i=F(t.easing),n=typeof t.duration=="number"&&t.duration>0?t.duration:1e3;t=Object.assign(Object.assign({},t),{easing:i,duration:n})}let e=Object.assign(Object.assign(Object.assign({},tt),t),{done:!1});if(s&&typeof s=="object"&&"val"in s){if(S(s)){const i=F(s.easing),n=typeof s.duration=="number"&&s.duration>0?s.duration:parseInt(t.duration)||1e3;s=Object.assign(Object.assign({},s),{easing:i,duration:n})}e=Object.assign(Object.assign({},e),s)}else e=Object.assign(Object.assign({},e),{val:s});return e}const y=()=>Date.now(),p=1e3/60;class it extends ${constructor(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};super(),this._props=Object.assign({},t),this._config=Object.assign({},e),this.initStates()}_wrapConfig(t,e){e=e&&typeof e=="object"?e:this._config;const i={};for(const n of Object.keys(t))i[n]=et(t[n],e);return i}initStates(t,e){t=t&&typeof t=="object"?t:this._props,e=e&&typeof e=="object"?e:this._config;const{from:i,to:n}=t;if(this._from={},i)for(const u of Object.keys(i))this._from[u]=typeof i[u]=="object"&&i[u].val?i[u].val:i[u];this._to=this._wrapConfig(n,e),this._delay=parseInt(e.delay)||0;const r=this._from&&v(this._from)||v(this._to),o=G(r);this._currentStyle=Object.assign({},r),this._currentVelocity=Object.assign({},o),this._lastIdealStyle=Object.assign({},r),this._lastIdealVelocity=Object.assign({},o),this.resetPlayStates(),this._frameCount=0,this._prevTime=0}animate(){this._timer==null&&(this._timer=requestAnimationFrame(t=>{const e=y();if(Y(this._currentStyle,this._to,this._currentVelocity,this._startedTime||e,e)||this._ended||this._stopped){this._wasAnimating&&!this._ended&&!this._stopped&&(this._timer=setTimeout(()=>{clearTimeout(this._timer),this._timer=null,this._ended=!0,this.emit("rest",this.getCurrentStates())},p)),this.resetPlayStates();return}this._started||(this._started=!0,this.emit("start",this.getCurrentStates())),this._stopped=!1,this._paused=!1,this._wasAnimating=!0,this._startedTime===0&&(this._startedTime=e);const i=e,n=i-this._prevTime;this._prevTime=i,i-this._startedTime<this._delay&&(this._timer=null,this.animate());const r={},o={},u={},f={},l=this._to&&Object.keys(this._to)||[];for(const a of l){const c=this._to[a];this._accumulatedTime[a]=typeof this._accumulatedTime[a]!="number"?n:this._accumulatedTime[a]+n;const O=this._from[a]!=null&&typeof this._from[a]=="object"?this._from[a].val:this._from[a],m=c.val;if(typeof c=="number")u[a]=c,f[a]=0,r[a]=c,o[a]=0;else{let h=this._lastIdealStyle[a],d=this._lastIdealVelocity[a];if(S(this._config)||S(c)){const{easing:j,duration:g}=c;h=O+j((i-this._startedTime)/g)*(m-O),i>=this._startedTime+g&&(h=m,c.done=!0),r[a]=h,u[a]=h}else if(m!=null&&m===this._currentStyle[a])u[a]=m,f[a]=0,r[a]=m,o[a]=0;else{const j=(this._accumulatedTime[a]-Math.floor(this._accumulatedTime[a]/p)*p)/p,g=Math.floor(this._accumulatedTime[a]/p);for(let V=0;V<g;V++)[h,d]=A(p/1e3,h,d,c.val,c.tension,c.friction,c.precision);const[P,B]=A(p/1e3,h,d,c.val,c.tension,c.friction,c.precision);u[a]=h+(P-h)*j,f[a]=d+(B-d)*j,r[a]=h,o[a]=d,this._accumulatedTime[a]-=g*p}}}this._timer=null,this._currentStyle=Object.assign({},u),this._currentVelocity=Object.assign({},f),this._lastIdealStyle=Object.assign({},r),this._lastIdealVelocity=Object.assign({},o),this._destroyed||(this.emit("frame",this.getCurrentStates()),this.animate())}))}start(){this._prevTime=y(),this._startedTime=y(),this.animate()}end(){this._ended||(this._ended=!0,this._currentStyle=this.getFinalStates(),this.emit("frame",this.getFinalStates()),this.emit("rest",this.getFinalStates())),this.destroy()}pause(){this._paused||(this._pausedTime=y(),this._paused=!0,this.emit("pause",this.getCurrentStates()),this.destroy(),this._destroyed=!1)}resume(){if(this._started&&this._paused){const e=y()-this._pausedTime;this._paused=!1,this._startedTime+=e,this._prevTime+=e,this._pausedTime=0,this.emit("resume",this.getCurrentStates()),this.animate()}}stop(){this.destroy(),this._stopped||(this._stopped=!0,this.emit("stop",this.getInitialStates()),this.initStates())}destroy(){cancelAnimationFrame(this._timer),clearTimeout(this._timer),this._timer=null,this._destroyed=!0}resetPlayStates(){this._started=!1,this._stopped=!1,this._ended=!1,this._paused=!1,this._destroyed=!1,this._timer=null,this._wasAnimating=!1,this._accumulatedTime={},this._startedTime=0,this._pausedTime=0}reset(){this.destroy(),this.initStates()}reverse(){this.destroy();const t=Object.assign({},this._props),[e,i]=[t.to,t.from];t.from=e,t.to=i,this._props=Object.assign({},t),this.initStates()}getCurrentStates(){return Object.assign({},this._currentStyle)}getInitialStates(){return Object.assign({},v(this._props.from))}getFinalStates(){return Object.assign({},v(this._props.to))}}export{it as A};