@nuxt/scripts
Version:
Load third-party scripts with better performance, privacy and DX in Nuxt Apps.
36 lines (35 loc) • 924 B
JavaScript
import { useEventListener } from "@vueuse/core";
import { tryOnScopeDispose } from "@vueuse/shared";
import { onNuxtReady } from "nuxt/app";
export function useScriptTriggerInteraction(options) {
if (import.meta.server) {
return new Promise(() => {
});
}
const { events, target = document.documentElement } = options;
return new Promise((resolve) => {
onNuxtReady(() => {
if (!target) {
resolve(false);
return;
}
const cleanupFns = [];
events.forEach((event) => {
const cleanup = useEventListener(
target,
event,
() => {
cleanupFns.forEach((fn) => fn());
resolve(true);
},
{ once: true, passive: true }
);
cleanupFns.push(cleanup);
});
tryOnScopeDispose(() => {
cleanupFns.forEach((fn) => fn());
resolve(false);
});
});
});
}