diff --git a/packages/gui/src/components/FeaturedPackages/FeaturedPackages.svelte b/packages/gui/src/components/FeaturedPackages/FeaturedPackages.svelte index 008f68f..75d8d20 100644 --- a/packages/gui/src/components/FeaturedPackages/FeaturedPackages.svelte +++ b/packages/gui/src/components/FeaturedPackages/FeaturedPackages.svelte @@ -15,9 +15,9 @@ let width = 0; let styleFeaturedPackages: string; - function getFeaturedStyle() { + function resetFeaturedStyle() { const position = pkgFocus * width; - return ` + styleFeaturedPackages = ` width: ${featuredPackages.length * width}px; left: -${position}px; transition: left 0.6s ease-in; @@ -26,16 +26,22 @@ function handleContainerResize(node: HTMLElement) { width = node.clientWidth; - styleFeaturedPackages = getFeaturedStyle(); + resetFeaturedStyle(); } - const loop = setInterval(() => { - pkgFocus++; - if (pkgFocus === featuredPackages.length) { - pkgFocus = 0; - } - styleFeaturedPackages = getFeaturedStyle(); - }, 3000); + let loop: NodeJS.Timer; + + function resetLoop() { + if (loop) clearInterval(loop); + loop = setInterval(() => { + pkgFocus++; + if (pkgFocus === featuredPackages.length) { + pkgFocus = 0; + } + resetFeaturedStyle(); + }, 3000); + resetFeaturedStyle(); + } featuredPackagesStore.subscribe((v) => { featuredPackages = v; @@ -46,6 +52,7 @@ if (!featuredPackages.length) { initializeFeaturedPackages(); } + resetLoop(); }); @@ -55,7 +62,11 @@
FEATURED PACKAGES