UNPKG

use-scroll-to-2

Version:

Scroll to React elements with custom timing function support

2 lines (1 loc) 1.99 kB
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("bezier-easing"),require("react")):"function"==typeof define&&define.amd?define(["exports","bezier-easing","react"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).useScrollTo={},e.BezierEasing,e.React)}(this,(function(e,t,n){"use strict";function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var r,u,i=o(t);(u=r||(r={}))[u.Stop=0]="Stop",u[u.Continue=1]="Continue";const f=(e,t)=>{const n=Date.now(),{duration:o,delay:r,easing:u}=t;(e=>{let t;const n=()=>{0===e()?cancelAnimationFrame(t):t=requestAnimationFrame(n)};t=requestAnimationFrame(n)})((()=>{const t=Date.now()-(n+r),i=Math.max(0,Math.min(1,t/o));return e(u(i)),t>=o?0:1}))};function l(e){return t=>"function"==typeof e?e(t):e}Object.defineProperty(e,"bezier",{enumerable:!0,get:function(){return i.default}}),e.useScrollTo=function(e){const{auto:t=!1,delay:o=0,duration:r=480,easing:u=i.default(.25,.1,.25,1),offsetLeft:c=0,offsetTop:a=0}=null!=e?e:{},s=n.useRef(null),d=n.useRef(r),p=n.useRef(o),w=n.useRef(a),b=n.useRef(c),m=n.useRef(u);n.useEffect((()=>{d.current=r}),[r]),n.useEffect((()=>{p.current=o}),[o]),n.useEffect((()=>{w.current=a}),[a]),n.useEffect((()=>{b.current=c}),[c]),n.useEffect((()=>{m.current=u}),[u]);const y=n.useCallback((()=>{if(!s.current)return;const e=d.current,t=p.current,n=m.current,o=w.current,r=b.current;requestAnimationFrame((()=>{var u,i;const{top:c,left:a}=s.current.getBoundingClientRect(),d=null!=(u=null==window?void 0:window.scrollY)?u:0,p=null!=(i=null==window?void 0:window.scrollX)?i:0,w=c-l(o)(c>0?1:-1),b=a-l(r)(c>0?1:-1);"number"!=typeof e||e<=0?null==window||window.scrollTo({top:d+w,left:p+b,behavior:"auto"}):f((e=>{null==window||window.scrollTo({top:d+e*w,left:p+e*b,behavior:"auto"})}),{duration:e,delay:t,easing:n})}))}),[]);return n.useLayoutEffect((()=>{t&&y()}),[t,y]),[s,y]},Object.defineProperty(e,"__esModule",{value:!0}),e[Symbol.toStringTag]="Module"}));