Co-authored-by: Vadim Smirnov <smirnou.vadzim@gmail.com> Co-authored-by: zakariasaad <zakaria.elas@gmail.com> Co-authored-by: Vilfred Sikker <vilfredsikker@gmail.com> Co-authored-by: olivermrbl <oliver@mrbltech.com>
30 lines
621 B
JavaScript
30 lines
621 B
JavaScript
import { useEffect, useRef, useState } from "react"
|
|
|
|
const useInView = options => {
|
|
const containerRef = useRef(null)
|
|
const [isInView, setIsInView] = useState(false)
|
|
|
|
const callback = entries => {
|
|
const [entry] = entries
|
|
setIsInView(entry.isIntersecting)
|
|
}
|
|
|
|
useEffect(() => {
|
|
const ref = containerRef.current
|
|
const observer = new IntersectionObserver(callback, options)
|
|
if (ref) {
|
|
observer.observe(ref)
|
|
}
|
|
|
|
return () => {
|
|
if (ref) {
|
|
observer.unobserve(ref)
|
|
}
|
|
}
|
|
}, [containerRef, options])
|
|
|
|
return [containerRef, isInView]
|
|
}
|
|
|
|
export default useInView
|