From c588248fd789dc049fb3b851865513e1a3ce725b Mon Sep 17 00:00:00 2001 From: marzban-dev Date: Sun, 1 Jun 2025 22:15:41 +0330 Subject: [PATCH] Updated --- frontend/components/home/ProductsShowcase.vue | 84 ++++++++++--------- 1 file changed, 44 insertions(+), 40 deletions(-) diff --git a/frontend/components/home/ProductsShowcase.vue b/frontend/components/home/ProductsShowcase.vue index a09f06e..55c346a 100644 --- a/frontend/components/home/ProductsShowcase.vue +++ b/frontend/components/home/ProductsShowcase.vue @@ -3,13 +3,16 @@ import useHomeData from "~/composables/api/home/useHomeData"; import { motion } from "motion-v"; +import useSlider from "~/composables/global/useSlider"; // state const { data: homeData } = useHomeData(); -const sliderTimer = ref(null); -const activeSlide = ref(0); +const { nextSlide, prevSlide, slideTo, activeSlide, progress } = useSlider({ + duration: 10_000, + count: homeData.value!.show_case_slider.length, +}); const variants = { hide: { opacity: 0, y: -200 }, @@ -83,36 +86,6 @@ const childImageVariants = { }, }, }; - -const slideTo = (index: number) => { - activeSlide.value = index; - restartSliderTimer(); -}; - -const nextSlide = () => { - const slidesCount = homeData.value!.show_case_slider.length; - if (activeSlide.value > slidesCount - 2) { - activeSlide.value = 0; - } else { - activeSlide.value = activeSlide.value + 1; - } -}; - -const restartSliderTimer = () => { - if (sliderTimer.value) clearInterval(sliderTimer.value); - sliderTimer.value = setInterval(() => { - nextSlide(); - }, 5000); -}; - -onMounted(() => { - nextSlide(); - restartSliderTimer(); -}); - -onUnmounted(() => { - restartSliderTimer(); -});