Initial commit
This commit is contained in:
27
frontend/src/lib/functions/observer.ts
Normal file
27
frontend/src/lib/functions/observer.ts
Normal file
@@ -0,0 +1,27 @@
|
||||
export default function inView(node, params = { threshold: 0 }) {
|
||||
let observer
|
||||
|
||||
const handleIntersect = (e) => {
|
||||
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) {
|
||||
setObserver(params)
|
||||
},
|
||||
|
||||
destroy() {
|
||||
if (observer) observer.disconnect()
|
||||
},
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user