diff --git a/src/renderer/components/ft-intersection-observer/ft-intersection-observer.js b/src/renderer/components/ft-intersection-observer/ft-intersection-observer.js new file mode 100644 index 00000000..80183c66 --- /dev/null +++ b/src/renderer/components/ft-intersection-observer/ft-intersection-observer.js @@ -0,0 +1,54 @@ +import Vue from 'vue' + +export default Vue.extend({ + name: 'FtIntersectionObserver', + props: { + checkOnMount: { + type: Boolean, + default: false + }, + margin: { + type: String, + default: '0px 0px 0px 0px' + }, + observeParent: { + type: Boolean, + default: false + }, + threshold: { + type: Number, + default: 1 + } + }, + data() { + const observer = new IntersectionObserver(this.handleIntersection, { + rootMargin: this.margin, + threshold: this.threshold + }) + const runOnce = false + + return { + observer, + runOnce + } + }, + mounted() { + this.observer.observe(this.observeParent ? this.$refs.elem.parentElement : this.$refs.elem) + }, + beforeDestroy() { + this.observer.disconnect() + }, + methods: { + handleIntersection(entries) { + if (!this.runOnce) { + this.runOnce = true + + if (!this.checkOnMount) { + return + } + } + + this.$emit(entries[0].isIntersecting ? 'intersected' : 'unintersected') + } + } +}) diff --git a/src/renderer/components/ft-intersection-observer/ft-intersection-observer.vue b/src/renderer/components/ft-intersection-observer/ft-intersection-observer.vue new file mode 100644 index 00000000..bb02f5a0 --- /dev/null +++ b/src/renderer/components/ft-intersection-observer/ft-intersection-observer.vue @@ -0,0 +1,5 @@ + + +