From d726d0594512abc5062df080f4a119f769a7140b Mon Sep 17 00:00:00 2001 From: marzban-dev Date: Wed, 19 Mar 2025 17:59:54 +0330 Subject: [PATCH] Complete Loading Overlay component --- frontend/components/global/LoadingOverlay.vue | 37 ++++++++++++++----- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/frontend/components/global/LoadingOverlay.vue b/frontend/components/global/LoadingOverlay.vue index 97f812b..688c5c2 100644 --- a/frontend/components/global/LoadingOverlay.vue +++ b/frontend/components/global/LoadingOverlay.vue @@ -3,29 +3,33 @@ // state const { $gsap: gsap } = useNuxtApp(); +const showLoadingOverlay = useState("showLoadingOverlay"); +const disableLoadingOverlay = useState("disableLoadingOverlay"); +const shouldRenderLoadingOverlay = ref(true); -const showLoadingOverlay = useState('showLoadingOverlay'); +const isWindowScrollLocked = useScrollLock(window); -// lifecycle +// watch watch(() => showLoadingOverlay.value, (value) => { if (!value) { const timeline = gsap.timeline(); + const imageElement = document.querySelector("#loading-overlay-image") as HTMLImageElement; + + imageElement.src = "/img/heymlz-loading-2.gif"; + timeline .to("#loading-overlay", { scale: 1 }) .to("#loading-overlay", { - scale: 0.8, opacity: 0, - delay: 2.5 - }) - .to("#loading-overlay", { - opacity: 0, - y: "20%", + delay: 2, onComplete: () => { shouldRenderLoadingOverlay.value = false; + isWindowScrollLocked.value = false; + disableLoadingOverlay.value = true; } }); } @@ -33,6 +37,16 @@ watch(() => showLoadingOverlay.value, (value) => { once: true }); + +// lifecycle + +onMounted(() => { + isWindowScrollLocked.value = true; + + const newImage = new Image(); + newImage.src = "/img/heymlz-loading-2.gif"; +}); +