| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 | 
							- import React from 'react'
 
- import { useThrottleFn } from 'ahooks'
 
- export enum ScrollPosition {
 
-   belowTheWrap = 'belowTheWrap',
 
-   showing = 'showing',
 
-   aboveTheWrap = 'aboveTheWrap',
 
- }
 
- type Params = {
 
-   wrapElemRef: React.RefObject<HTMLElement>
 
-   nextToStickyELemRef: React.RefObject<HTMLElement>
 
- }
 
- const useStickyScroll = ({
 
-   wrapElemRef,
 
-   nextToStickyELemRef,
 
- }: Params) => {
 
-   const [scrollPosition, setScrollPosition] = React.useState<ScrollPosition>(ScrollPosition.belowTheWrap)
 
-   const { run: handleScroll } = useThrottleFn(() => {
 
-     const wrapDom = wrapElemRef.current
 
-     const stickyDOM = nextToStickyELemRef.current
 
-     if (!wrapDom || !stickyDOM)
 
-       return
 
-     const { height: wrapHeight, top: wrapTop } = wrapDom.getBoundingClientRect()
 
-     const { top: nextToStickyTop } = stickyDOM.getBoundingClientRect()
 
-     let scrollPositionNew = ScrollPosition.belowTheWrap
 
-     if (nextToStickyTop - wrapTop >= wrapHeight)
 
-       scrollPositionNew = ScrollPosition.belowTheWrap
 
-     else if (nextToStickyTop <= wrapTop)
 
-       scrollPositionNew = ScrollPosition.aboveTheWrap
 
-     else
 
-       scrollPositionNew = ScrollPosition.showing
 
-     if (scrollPosition !== scrollPositionNew)
 
-       setScrollPosition(scrollPositionNew)
 
-   }, { wait: 100 })
 
-   return {
 
-     handleScroll,
 
-     scrollPosition,
 
-   }
 
- }
 
- export default useStickyScroll
 
 
  |