@stackoverfloweth/vue-compositions
Version:
A collection of reusable vue compositions.
45 lines • 1.26 kB
JavaScript
import { onMounted, onUnmounted, ref } from 'vue';
export function useMutationObserver(callback) {
let mutationObserver = null;
const observe = (element, options) => {
const elementRef = ref(element);
const observer = getObserver();
if (elementRef.value) {
observer.observe(elementRef.value, options);
}
};
const disconnect = () => {
const observer = getObserver();
observer.disconnect();
};
const check = (element, options) => {
const elementRef = ref(element);
if (!elementRef.value) {
return;
}
const observer = new MutationObserver(callback);
observer.observe(elementRef.value, options);
setTimeout(() => observer.disconnect(), 100);
};
function getObserver() {
if (!mutationObserver) {
createObserver();
}
return mutationObserver;
}
function createObserver() {
mutationObserver = new MutationObserver(callback);
}
onMounted(() => {
createObserver();
});
onUnmounted(() => {
disconnect();
});
return {
observe,
disconnect,
check,
};
}
//# sourceMappingURL=useMutationObserver.js.map