UNPKG

fullpage-scroll-component

Version:
79 lines (72 loc) 2.34 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var react = require('react'); var debounce = require('lodash/debounce'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var debounce__default = /*#__PURE__*/_interopDefaultLegacy(debounce); function useDebouncedScrollDirection({ upScrollCallback, downScrollCallback, isPreventDefault, debounceDelay = 1000 }) { const [scrollDir, setScrollDir] = react.useState(""); const [touchStart, setTouchStart] = react.useState(0); react.useEffect(() => { const debouncedScroll = debounce__default["default"](direction => { if (direction === "down") { if (downScrollCallback && isPreventDefault) { downScrollCallback(); } } if (direction === "up") { if (upScrollCallback && isPreventDefault) { upScrollCallback(); } } }, debounceDelay); const handleScroll = e => { if (isPreventDefault) { e.preventDefault(); } if (e.deltaY > 0) { debouncedScroll("down"); setScrollDir("down"); } else if (e.deltaY < 0) { debouncedScroll("up"); setScrollDir("up"); } }; const onSetTouchStart = e => { setTouchStart(e.changedTouches[0].clientY); }; const handleMobileScroll = e => { if (isPreventDefault) { e.preventDefault(); } if (e.changedTouches[0].clientY < touchStart) { debouncedScroll("down"); setScrollDir("down"); } else if (e.changedTouches[0].clientY > touchStart) { debouncedScroll("up"); setScrollDir("up"); } }; window.addEventListener("wheel", handleScroll, { passive: false }); window.addEventListener("touchmove", handleMobileScroll, { passive: false }); window.addEventListener("touchstart", onSetTouchStart, { passive: false }); return () => { window.removeEventListener("wheel", handleScroll); window.removeEventListener("touchmove", handleMobileScroll); window.removeEventListener("touchstart", onSetTouchStart); }; }, [upScrollCallback, downScrollCallback, touchStart]); return scrollDir; } exports.useDebouncedScrollDirection = useDebouncedScrollDirection;