Introduce Intersection component

This commit is contained in:
Andrew Bastin
2021-05-11 23:38:47 -04:00
parent c756be54a1
commit 853acfda2c

View File

@@ -0,0 +1,36 @@
<template>
<div ref="container">
<slot />
</div>
</template>
<script lang="ts">
/*
Implements a wrapper listening to viewport intersections via
IntesectionObserver API
Events
------
intersecting (entry: IntersectionObserverEntry) -> When the component is intersecting the viewport
*/
import Vue from "vue"
export default Vue.extend({
data() {
return {
observer: null as IntersectionObserver | null,
}
},
mounted() {
this.observer = new IntersectionObserver(([entry]) => {
if (entry && entry.isIntersecting) {
this.$emit("intersecting", entry)
}
})
this.observer.observe(this.$refs.container as Element)
},
beforeDestroy() {
this.observer?.disconnect()
},
})
</script>