From 3ec093b173465cdb2ee8415b6b5d82917b1e5ed5 Mon Sep 17 00:00:00 2001 From: marzban-dev Date: Sat, 31 May 2025 15:29:13 +0330 Subject: [PATCH] Add pagination --- frontend/components/home/ProductsShowcase.vue | 32 ++++++++++++++++--- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/frontend/components/home/ProductsShowcase.vue b/frontend/components/home/ProductsShowcase.vue index 8e53bc0..ef721c8 100644 --- a/frontend/components/home/ProductsShowcase.vue +++ b/frontend/components/home/ProductsShowcase.vue @@ -8,6 +8,7 @@ import { motion } from "motion-v"; const { data: homeData } = useHomeData(); +const sliderTimer = ref(null); const activeSlide = ref(0); const variants = { @@ -83,6 +84,11 @@ 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) { @@ -92,12 +98,16 @@ const nextSlide = () => { } }; -onMounted(() => { - nextSlide(); - - setInterval(() => { +const restartSliderTimer = () => { + if (sliderTimer.value) clearInterval(sliderTimer.value); + sliderTimer.value = setInterval(() => { nextSlide(); }, 5000); +}; + +onMounted(() => { + nextSlide(); + restartSliderTimer(); }); @@ -177,6 +187,20 @@ onMounted(() => { :variants="childContentVariants" class="flex flex-col items-center justify-center gap-6 text-center" > + +
+ +
+ {{ slide.title }}