UNPKG

gsap

Version:

GSAP is a framework-agnostic JavaScript animation library that turns developers into animation superheroes. Build high-performance animations that work in **every** major browser. Animate CSS, SVG, canvas, React, Vue, WebGL, colors, strings, motion paths,

12 lines (9 loc) 9.98 kB
/*! * Observer 3.13.0 * https://gsap.com * * @license Copyright 2025, GreenSock. All rights reserved. * Subject to the terms at https://gsap.com/standard-license. * @author: Jack Doyle, jack@greensock.com */ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e=e||self).window=e.window||{})}(this,function(a){"use strict";function _defineProperties(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function r(){return Me||"undefined"!=typeof window&&(Me=window.gsap)&&Me.registerPlugin&&Me}var Me,De,Ee,Pe,Oe,Ae,ze,Ye,Xe,t,Te,ke,Ce,o=1,He=[];a._scrollers=[],a._proxies=[];function x(e,t){return~a._proxies.indexOf(e)&&a._proxies[a._proxies.indexOf(e)+1][t]}function y(e){return!!~t.indexOf(e)}function z(e,t,n,r,o){return e.addEventListener(t,n,{passive:!1!==r,capture:!!o})}function A(e,t,n,r){return e.removeEventListener(t,n,!!r)}function D(){return Te&&Te.isPressed||a._scrollers.cache++}function E(n,r){function ra(e){if(e||0===e){o&&(Ee.history.scrollRestoration="manual");var t=Te&&Te.isPressed;e=ra.v=Math.round(e)||(Te&&Te.iOS?1:0),n(e),ra.cacheID=a._scrollers.cache,t&&i("ss",e)}else(r||a._scrollers.cache!==ra.cacheID||i("ref"))&&(ra.cacheID=a._scrollers.cache,ra.v=n());return ra.v+ra.offset}return ra.offset=0,n&&ra}function H(e,t){return(t&&t._ctx&&t._ctx.selector||Me.utils.toArray)(e)[0]||("string"==typeof e&&!1!==Me.config().nullTargetWarn?console.warn("Element not found:",e):null)}function J(t,e){var n=e.s,r=e.sc;y(t)&&(t=Pe.scrollingElement||Oe);var o=a._scrollers.indexOf(t),i=r===Ge.sc?1:2;~o||(o=a._scrollers.push(t)-1),a._scrollers[o+i]||z(t,"scroll",D);var s=a._scrollers[o+i],c=s||(a._scrollers[o+i]=E(x(t,n),!0)||(y(t)?r:E(function(e){return arguments.length?t[n]=e:t[n]})));return c.target=t,s||(c.smooth="smooth"===Me.getProperty(t,"scrollBehavior")),c}function K(e,t,o){function Ta(e,t){var n=Le();t||r<n-c?(s=i,i=e,a=c,c=n):o?i+=e:i=s+(e-s)/(n-a)*(c-a)}var i=e,s=e,c=Le(),a=c,r=t||50,l=Math.max(500,3*r);return{update:Ta,reset:function reset(){s=i=o?0:i,a=c=0},getVelocity:function getVelocity(e){var t=a,n=s,r=Le();return!e&&0!==e||e===i||Ta(e),c===a||l<r-a?0:(i+(o?n:-n))/((o?r:c)-t)*1e3}}}function L(e,t){return t&&!e._gsapAllow&&e.preventDefault(),e.changedTouches?e.changedTouches[0]:e}function M(e){var t=Math.max.apply(Math,e),n=Math.min.apply(Math,e);return Math.abs(t)>=Math.abs(n)?t:n}function N(){(Xe=Me.core.globals().ScrollTrigger)&&Xe.core&&function _integrate(){var e=Xe.core,n=e.bridge||{},t=e._scrollers,r=e._proxies;t.push.apply(t,a._scrollers),r.push.apply(r,a._proxies),a._scrollers=t,a._proxies=r,i=function _bridge(e,t){return n[e](t)}}()}function O(e){return Me=e||r(),!De&&Me&&"undefined"!=typeof document&&document.body&&(Ee=window,Oe=(Pe=document).documentElement,Ae=Pe.body,t=[Ee,Pe,Oe,Ae],Me.utils.clamp,Ce=Me.core.context||function(){},Ye="onpointerenter"in Ae?"pointer":"mouse",ze=c.isTouch=Ee.matchMedia&&Ee.matchMedia("(hover: none), (pointer: coarse)").matches?1:"ontouchstart"in Ee||0<navigator.maxTouchPoints||0<navigator.msMaxTouchPoints?2:0,ke=c.eventTypes=("ontouchstart"in Oe?"touchstart,touchmove,touchcancel,touchend":"onpointerdown"in Oe?"pointerdown,pointermove,pointercancel,pointerup":"mousedown,mousemove,mouseup,mouseup").split(","),setTimeout(function(){return o=0},500),N(),De=1),De}var Le=Date.now,i=function _bridge(e,t){return t},n="scrollLeft",s="scrollTop",Se={s:n,p:"left",p2:"Left",os:"right",os2:"Right",d:"width",d2:"Width",a:"x",sc:E(function(e){return arguments.length?Ee.scrollTo(e,Ge.sc()):Ee.pageXOffset||Pe[n]||Oe[n]||Ae[n]||0})},Ge={s:s,p:"top",p2:"Top",os:"bottom",os2:"Bottom",d:"height",d2:"Height",a:"y",op:Se,sc:E(function(e){return arguments.length?Ee.scrollTo(Se.sc(),e):Ee.pageYOffset||Pe[s]||Oe[s]||Ae[s]||0})};Se.op=Ge,a._scrollers.cache=0;var c=(Observer.prototype.init=function init(e){De||O(Me)||console.warn("Please gsap.registerPlugin(Observer)"),Xe||N();var o=e.tolerance,s=e.dragMinimum,t=e.type,i=e.target,n=e.lineHeight,r=e.debounce,c=e.preventDefault,a=e.onStop,l=e.onStopDelay,u=e.ignore,f=e.wheelSpeed,d=e.event,g=e.onDragStart,p=e.onDragEnd,h=e.onDrag,v=e.onPress,_=e.onRelease,x=e.onRight,m=e.onLeft,b=e.onUp,w=e.onDown,E=e.onChangeX,P=e.onChangeY,Y=e.onChange,X=e.onToggleX,T=e.onToggleY,k=e.onHover,C=e.onHoverEnd,S=e.onMove,G=e.ignoreCheck,F=e.isNormalizer,I=e.onGestureStart,V=e.onGestureEnd,R=e.onWheel,W=e.onEnable,j=e.onDisable,B=e.onClick,q=e.scrollSpeed,U=e.capture,Q=e.allowClicks,Z=e.lockAxis,$=e.onLockAxis;function tc(){return me=Le()}function uc(e,t){return(ce.event=e)&&u&&function _isWithin(e,t){for(var n=t.length;n--;)if(t[n]===e||t[n].contains(e))return!0;return!1}(e.target,u)||t&&he&&"touch"!==e.pointerType||G&&G(e,t)}function wc(){var e=ce.deltaX=M(_e),t=ce.deltaY=M(xe),n=Math.abs(e)>=o,r=Math.abs(t)>=o;Y&&(n||r)&&Y(ce,e,t,_e,xe),n&&(x&&0<ce.deltaX&&x(ce),m&&ce.deltaX<0&&m(ce),E&&E(ce),X&&ce.deltaX<0!=ae<0&&X(ce),ae=ce.deltaX,_e[0]=_e[1]=_e[2]=0),r&&(w&&0<ce.deltaY&&w(ce),b&&ce.deltaY<0&&b(ce),P&&P(ce),T&&ce.deltaY<0!=le<0&&T(ce),le=ce.deltaY,xe[0]=xe[1]=xe[2]=0),(re||ne)&&(S&&S(ce),ne&&(g&&1===ne&&g(ce),h&&h(ce),ne=0),re=!1),ie&&!(ie=!1)&&$&&$(ce),oe&&(R(ce),oe=!1),ee=0}function xc(e,t,n){_e[n]+=e,xe[n]+=t,ce._vx.update(e),ce._vy.update(t),r?ee=ee||requestAnimationFrame(wc):wc()}function yc(e,t){Z&&!se&&(ce.axis=se=Math.abs(e)>Math.abs(t)?"x":"y",ie=!0),"y"!==se&&(_e[2]+=e,ce._vx.update(e,!0)),"x"!==se&&(xe[2]+=t,ce._vy.update(t,!0)),r?ee=ee||requestAnimationFrame(wc):wc()}function zc(e){if(!uc(e,1)){var t=(e=L(e,c)).clientX,n=e.clientY,r=t-ce.x,o=n-ce.y,i=ce.isDragging;ce.x=t,ce.y=n,(i||(r||o)&&(Math.abs(ce.startX-t)>=s||Math.abs(ce.startY-n)>=s))&&(ne=i?2:1,i||(ce.isDragging=!0),yc(r,o))}}function Cc(e){return e.touches&&1<e.touches.length&&(ce.isGesturing=!0)&&I(e,ce.isDragging)}function Dc(){return(ce.isGesturing=!1)||V(ce)}function Ec(e){if(!uc(e)){var t=fe(),n=de();xc((t-ge)*q,(n-pe)*q,1),ge=t,pe=n,a&&te.restart(!0)}}function Fc(e){if(!uc(e)){e=L(e,c),R&&(oe=!0);var t=(1===e.deltaMode?n:2===e.deltaMode?Ee.innerHeight:1)*f;xc(e.deltaX*t,e.deltaY*t,0),a&&!F&&te.restart(!0)}}function Gc(e){if(!uc(e)){var t=e.clientX,n=e.clientY,r=t-ce.x,o=n-ce.y;ce.x=t,ce.y=n,re=!0,a&&te.restart(!0),(r||o)&&yc(r,o)}}function Hc(e){ce.event=e,k(ce)}function Ic(e){ce.event=e,C(ce)}function Jc(e){return uc(e)||L(e,c)&&B(ce)}this.target=i=H(i)||Oe,this.vars=e,u=u&&Me.utils.toArray(u),o=o||1e-9,s=s||0,f=f||1,q=q||1,t=t||"wheel,touch,pointer",r=!1!==r,n=n||parseFloat(Ee.getComputedStyle(Ae).lineHeight)||22;var ee,te,ne,re,oe,ie,se,ce=this,ae=0,le=0,ue=e.passive||!c&&!1!==e.passive,fe=J(i,Se),de=J(i,Ge),ge=fe(),pe=de(),he=~t.indexOf("touch")&&!~t.indexOf("pointer")&&"pointerdown"===ke[0],ve=y(i),ye=i.ownerDocument||Pe,_e=[0,0,0],xe=[0,0,0],me=0,be=ce.onPress=function(e){uc(e,1)||e&&e.button||(ce.axis=se=null,te.pause(),ce.isPressed=!0,e=L(e),ae=le=0,ce.startX=ce.x=e.clientX,ce.startY=ce.y=e.clientY,ce._vx.reset(),ce._vy.reset(),z(F?i:ye,ke[1],zc,ue,!0),ce.deltaX=ce.deltaY=0,v&&v(ce))},we=ce.onRelease=function(t){if(!uc(t,1)){A(F?i:ye,ke[1],zc,!0);var e=!isNaN(ce.y-ce.startY),n=ce.isDragging,r=n&&(3<Math.abs(ce.x-ce.startX)||3<Math.abs(ce.y-ce.startY)),o=L(t);!r&&e&&(ce._vx.reset(),ce._vy.reset(),c&&Q&&Me.delayedCall(.08,function(){if(300<Le()-me&&!t.defaultPrevented)if(t.target.click)t.target.click();else if(ye.createEvent){var e=ye.createEvent("MouseEvents");e.initMouseEvent("click",!0,!0,Ee,1,o.screenX,o.screenY,o.clientX,o.clientY,!1,!1,!1,!1,0,null),t.target.dispatchEvent(e)}})),ce.isDragging=ce.isGesturing=ce.isPressed=!1,a&&n&&!F&&te.restart(!0),ne&&wc(),p&&n&&p(ce),_&&_(ce,r)}};te=ce._dc=Me.delayedCall(l||.25,function onStopFunc(){ce._vx.reset(),ce._vy.reset(),te.pause(),a&&a(ce)}).pause(),ce.deltaX=ce.deltaY=0,ce._vx=K(0,50,!0),ce._vy=K(0,50,!0),ce.scrollX=fe,ce.scrollY=de,ce.isDragging=ce.isGesturing=ce.isPressed=!1,Ce(this),ce.enable=function(e){return ce.isEnabled||(z(ve?ye:i,"scroll",D),0<=t.indexOf("scroll")&&z(ve?ye:i,"scroll",Ec,ue,U),0<=t.indexOf("wheel")&&z(i,"wheel",Fc,ue,U),(0<=t.indexOf("touch")&&ze||0<=t.indexOf("pointer"))&&(z(i,ke[0],be,ue,U),z(ye,ke[2],we),z(ye,ke[3],we),Q&&z(i,"click",tc,!0,!0),B&&z(i,"click",Jc),I&&z(ye,"gesturestart",Cc),V&&z(ye,"gestureend",Dc),k&&z(i,Ye+"enter",Hc),C&&z(i,Ye+"leave",Ic),S&&z(i,Ye+"move",Gc)),ce.isEnabled=!0,ce.isDragging=ce.isGesturing=ce.isPressed=re=ne=!1,ce._vx.reset(),ce._vy.reset(),ge=fe(),pe=de(),e&&e.type&&be(e),W&&W(ce)),ce},ce.disable=function(){ce.isEnabled&&(He.filter(function(e){return e!==ce&&y(e.target)}).length||A(ve?ye:i,"scroll",D),ce.isPressed&&(ce._vx.reset(),ce._vy.reset(),A(F?i:ye,ke[1],zc,!0)),A(ve?ye:i,"scroll",Ec,U),A(i,"wheel",Fc,U),A(i,ke[0],be,U),A(ye,ke[2],we),A(ye,ke[3],we),A(i,"click",tc,!0),A(i,"click",Jc),A(ye,"gesturestart",Cc),A(ye,"gestureend",Dc),A(i,Ye+"enter",Hc),A(i,Ye+"leave",Ic),A(i,Ye+"move",Gc),ce.isEnabled=ce.isPressed=ce.isDragging=!1,j&&j(ce))},ce.kill=ce.revert=function(){ce.disable();var e=He.indexOf(ce);0<=e&&He.splice(e,1),Te===ce&&(Te=0)},He.push(ce),F&&y(i)&&(Te=ce),ce.enable(d)},function _createClass(e,t,n){return t&&_defineProperties(e.prototype,t),n&&_defineProperties(e,n),e}(Observer,[{key:"velocityX",get:function get(){return this._vx.getVelocity()}},{key:"velocityY",get:function get(){return this._vy.getVelocity()}}]),Observer);function Observer(e){this.init(e)}c.version="3.13.0",c.create=function(e){return new c(e)},c.register=O,c.getAll=function(){return He.slice()},c.getById=function(t){return He.filter(function(e){return e.vars.id===t})[0]},r()&&Me.registerPlugin(c),a.Observer=c,a._getProxyProp=x,a._getScrollFunc=J,a._getTarget=H,a._getVelocityProp=K,a._horizontal=Se,a._isViewport=y,a._vertical=Ge,a.default=c;if (typeof(window)==="undefined"||window!==a){Object.defineProperty(a,"__esModule",{value:!0})} else {delete a.default}});