From a27cd3bfdf30158517421dcbf4900626172657b9 Mon Sep 17 00:00:00 2001 From: Vadim Date: Sat, 4 Sep 2021 19:12:03 +0300 Subject: [PATCH] #69 : Apply clones number --- src/components/Carousel/Carousel.svelte | 58 +++++++++++++++---------- 1 file changed, 36 insertions(+), 22 deletions(-) diff --git a/src/components/Carousel/Carousel.svelte b/src/components/Carousel/Carousel.svelte index ab2c14b..52f1496 100644 --- a/src/components/Carousel/Carousel.svelte +++ b/src/components/Carousel/Carousel.svelte @@ -99,19 +99,20 @@ /** * Number of pages to show */ - export let pagesToShow = 2 + export let pagesToShow = 3 /** * Number of pages to scroll */ - export let pagesToScroll = 2 + export let pagesToScroll = 1 + export async function goTo(pageIndex, options) { const animated = get(options, 'animated', true) if (typeof pageIndex !== 'number') { throw new Error('pageIndex should be a number') } - await showPage(pageIndex + Number(infinite), { animated }) + await showPage(pageIndex + clonesCount, { animated }) } export async function goToPrev(options) { @@ -129,17 +130,25 @@ $: originalCurrentPageIndex = getOriginalCurrentPageIndex(currentPageIndex, pagesCount, infinite) // index without cloenes $: dispatch('pageChange', originalCurrentPageIndex) - const PAGE_CLONES_COUNT = 2 - $: pagesItemsClonesCount = pagesToShow * 2 + let clonesCount = Math.max(pagesToScroll, pagesToShow) // TODO: check + $: pagesItemsClonesCount = clonesCount * 2 let pagesCount = 0 - let pagesItemsCount = 0 - $: originalPagesCount = Math.max(pagesCount - (infinite ? PAGE_CLONES_COUNT : 0), 1) // without clones + + $: originalPagesCount = Math.max( + Math.ceil( + ( + pagesCount - (infinite ? pagesItemsClonesCount : 0) + ) / pagesToScroll + ), + 1) // without clones function getOriginalCurrentPageIndex(currentPageIndex, pagesCount, infinite) { + console.log('getOriginalCurrentPageIndex', currentPageIndex, pagesCount, infinite) + console.log('pagesItemsClonesCount', pagesItemsClonesCount) if (infinite) { - if (currentPageIndex === pagesCount - 1) return 0 - if (currentPageIndex === 0) return (pagesCount - PAGE_CLONES_COUNT) - 1 - return currentPageIndex - 1 + if (currentPageIndex === pagesCount - clonesCount) return 0 + if (currentPageIndex === 0) return (pagesCount - clonesCount) + return currentPageIndex - clonesCount } return currentPageIndex } @@ -178,10 +187,9 @@ pagesItemWidth = pagesWindowWidth / pagesToShow - pagesItemsCount = children.length - pagesCount = (pagesItemsCount / pagesToScroll) // Math ceil - - for (let pageIndex=0; pageIndexlen - 1 - pagesToShow; i--) { + for (let i=len - 1; i>len - 1 - clonesCount; i--) { toPrepend.push(pagesElement.children[i].cloneNode(true)) } @@ -234,15 +242,17 @@ await tick() cleanupFns.push(store.subscribe(value => { currentPageIndex = value.currentPageIndex + console.log('currentPageIndex', currentPageIndex) })) cleanupFns.push(() => progressManager.reset()) if (pagesElement && pageWindowElement) { - // load first and last child to clone them + // load first and last child to clone them + // TODO: update loaded = [0, pagesElement.children.length - 1] await tick() infinite && addClones() - store.init(initialPageIndex + Number(infinite)) + store.init(initialPageIndex + clonesCount) applyPageSizes() } @@ -256,7 +266,7 @@ }) async function handlePageChange(pageIndex) { - await showPage(pageIndex + Number(infinite)) + await showPage(pageIndex + clonesCount) } function offsetPage(options) { @@ -264,7 +274,10 @@ return new Promise((resolve) => { // _duration is an offset animation time _duration = animated ? duration : 0 + console.log(currentPageIndex, pagesItemWidth, pagesToScroll) offset = -currentPageIndex * (pagesItemWidth * pagesToScroll) + console.log('offset', offset) + setTimeout(() => { resolve() }, _duration) @@ -276,10 +289,10 @@ let jumped = false if (infinite) { if (currentPageIndex === 0) { - await showPage(pagesCount - PAGE_CLONES_COUNT, { animated: false }) + await showPage(pagesCount - clonesCount, { animated: false }) jumped = true - } else if (currentPageIndex === pagesCount - 1) { - await showPage(1, { animated: false }) + } else if (currentPageIndex === pagesCount - clonesCount) { + await showPage(clonesCount, { animated: false }) jumped = true } } @@ -415,6 +428,7 @@ pagesCount={originalPagesCount} showPage={handlePageChange} > + {originalCurrentPageIndex}/{originalPagesCount}