From 9d00b1bc6ca9e11b6c9ed8a370f2a1ec8bbb7cbe Mon Sep 17 00:00:00 2001 From: Vadim Date: Fri, 2 Jul 2021 00:24:04 +0300 Subject: [PATCH] #31 : Add ProgressManager to carousel component --- src/components/Carousel/Carousel.svelte | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/components/Carousel/Carousel.svelte b/src/components/Carousel/Carousel.svelte index 7189513..36a3656 100644 --- a/src/components/Carousel/Carousel.svelte +++ b/src/components/Carousel/Carousel.svelte @@ -12,6 +12,7 @@ } from '../../utils/event' import { getAdjacentIndexes } from '../../utils/page' import { get } from '../../utils/object' + import { ProgressManager } from '../../utils/ProgressManager.js' const dispatch = createEventDispatcher() @@ -107,12 +108,22 @@ let pagesElement let focused = false + let progressValue + const progressManager = new ProgressManager({ + autoplayDuration, + onValueChange: (value) => { + progressValue = value + } + }) + let autoplayInterval = null $: { if (pauseOnFocus) { if (focused) { + progressManager.pause() clearAutoplay() } else { + progressManager.resume() applyAutoplay() } } @@ -156,11 +167,17 @@ } let cleanupFns = [] + onMount(() => { (async () => { await tick() cleanupFns.push(store.subscribe(value => { currentPageIndex = value.currentPageIndex + + progressManager.reset() // clear interval out of condition in case autoplay was changed reactively + if (autoplay) { + progressManager.start() + } })) if (pagesElement && pageWindowElement) { // load first and last child to clone them