UNPKG

@shopgate/engage

Version:
7 lines 1.65 kB
import _throttle from"lodash/throttle";function _slicedToArray(arr,i){return _arrayWithHoles(arr)||_iterableToArrayLimit(arr,i)||_nonIterableRest();}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance");}function _iterableToArrayLimit(arr,i){var _arr=[];var _n=true;var _d=false;var _e=undefined;try{for(var _i=arr[Symbol.iterator](),_s;!(_n=(_s=_i.next()).done);_n=true){_arr.push(_s.value);if(i&&_arr.length===i)break;}}catch(err){_d=true;_e=err;}finally{try{if(!_n&&_i["return"]!=null)_i["return"]();}finally{if(_d)throw _e;}}return _arr;}function _arrayWithHoles(arr){if(Array.isArray(arr))return arr;}import{useEffect,useState,useCallback}from'react';/** * * @param {Function} callback callback * @param {Object} [element] element */export function useScroll(callback,element){var _useState=useState(0),_useState2=_slicedToArray(_useState,2),setScrollPosition=_useState2[1];var previousScrollTop=0;/** * Scroll handler */var handleDocumentScroll=useCallback(_throttle(function(){var container=element||document.documentElement||document.body;var currentScrollTop=container.scrollY===undefined?container.scrollTop:container.scrollY;setScrollPosition(function(previousPosition){previousScrollTop=previousPosition;return currentScrollTop;});callback({previousScrollTop:previousScrollTop,currentScrollTop:currentScrollTop});},250),[setScrollPosition,element,callback]);useEffect(function(){(element||window).addEventListener('scroll',handleDocumentScroll);return function(){return(element||window).removeEventListener('scroll',handleDocumentScroll);};},[handleDocumentScroll,element]);}