Files
mobilizon-frontend/src/components/Utils/ObserverElement.vue
Thomas Citharel 2e72f6faf4 build: switch from yarn to npm to manage js dependencies and move js contents to root
yarn v1 is being deprecated and starts to have some issues

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2023-11-14 17:24:42 +01:00

36 lines
731 B
Vue

<template>
<div class="observer" ref="observed" />
</template>
<script lang="ts" setup>
import "intersection-observer";
import { onMounted, onUnmounted, ref } from "vue";
const props = withDefaults(
defineProps<{
options?: Record<string, any>;
}>(),
{ options: () => ({}) }
);
const observer = ref<IntersectionObserver>();
const observed = ref<HTMLElement>();
const emit = defineEmits(["intersect"]);
onMounted(() => {
observer.value = new IntersectionObserver(([entry]) => {
if (entry && entry.isIntersecting) {
emit("intersect");
}
}, props.options);
if (observed.value) {
observer.value.observe(observed.value);
}
});
onUnmounted(() => {
observer.value?.disconnect();
});
</script>