Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 1324 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1323 stevensc 1
import { useState, useEffect, useRef } from 'react'
2
 
2774 stevensc 3
export function useNearScreen({
1323 stevensc 4
  externalRef,
5
  once = true,
6
  rootMargin = '100px'
7
}) {
8
  const [isNearScreen, setShow] = useState(false)
1324 stevensc 9
  const fromRef = useRef(null)
1323 stevensc 10
 
1324 stevensc 11
  useEffect(() => {
1323 stevensc 12
    const element = externalRef ? externalRef.current : fromRef.current
13
 
14
    const onChange = (entries, observer) => {
15
      const el = entries[0]
16
 
17
      if (el.isIntersecting) {
18
        setShow(true)
19
 
20
        once && observer.disconnect()
21
      } else {
22
        !once && setShow(false)
23
      }
24
    }
25
 
26
    const observer = new IntersectionObserver(onChange, {
27
      rootMargin
28
    })
29
 
30
    if (element) observer.observe(element)
31
 
32
    return () => observer && observer.disconnect()
1324 stevensc 33
  }, [externalRef, fromRef])
1323 stevensc 34
 
1324 stevensc 35
  return [isNearScreen, fromRef]
1323 stevensc 36
}