28 lines
702 B
TypeScript
28 lines
702 B
TypeScript
export default function inView(node: Element, params = { threshold: 0 }) {
|
|
let observer: IntersectionObserver
|
|
|
|
const handleIntersect = (e: any) => {
|
|
const v = e[0].isIntersecting ? "enter" : "exit"
|
|
node.dispatchEvent(new CustomEvent(v))
|
|
}
|
|
|
|
const setObserver = ({ threshold }) => {
|
|
const options = { threshold }
|
|
if (observer) observer.disconnect()
|
|
observer = new IntersectionObserver(handleIntersect, options)
|
|
observer.observe(node)
|
|
}
|
|
|
|
setObserver(params)
|
|
|
|
return {
|
|
update(params: any) {
|
|
setObserver(params)
|
|
},
|
|
|
|
destroy() {
|
|
if (observer) observer.disconnect()
|
|
},
|
|
}
|
|
}
|