Add autoplay

This commit is contained in:
Vadim
2021-01-21 20:22:57 +03:00
parent 8202bb9847
commit 5d415d6229
2 changed files with 44 additions and 5 deletions

View File

@@ -36,6 +36,16 @@
*/ */
export let speed = 500 export let speed = 500
/**
* Enables auto play of slides
*/
export let autoplay = false
/**
* Auto play change interval
*/
export let autoplaySpeed = 3000
let pagesCount = 0 let pagesCount = 0
let contentContainerWidth = 0 let contentContainerWidth = 0
let offset let offset
@@ -60,13 +70,30 @@
moveToPage(initialPage) moveToPage(initialPage)
} }
function applyAutoplay() {
let interval
if (autoplay) {
interval = setInterval(() => {
showNextPage()
}, autoplaySpeed)
}
return {
teardownAutoplay: () => {
interval && clearInterval(interval)
}
}
}
onMount(() => { onMount(() => {
store.reset() // to init after hot reload store.reset() // to init after hot reload
applySlideSizes() applySlideSizes()
const { teardownAutoplay } = applyAutoplay()
window.addEventListener('resize', applySlideSizes) window.addEventListener('resize', applySlideSizes)
return () => { return () => {
window.removeEventListener('resize', applySlideSizes) window.removeEventListener('resize', applySlideSizes)
teardownAutoplay()
} }
}) })
@@ -79,11 +106,11 @@
offset = -$store.currentItemIndex * contentContainerWidth offset = -$store.currentItemIndex * contentContainerWidth
} }
function handlePrevClick() { function showPrevPage() {
store.prev({ infinite, pagesCount }) store.prev({ infinite, pagesCount })
applyOffset() applyOffset()
} }
function handleNextClick() { function showNextPage() {
store.next({ infinite, pagesCount }) store.next({ infinite, pagesCount })
applyOffset() applyOffset()
} }
@@ -94,7 +121,7 @@
<div class="side-container"> <div class="side-container">
<span <span
class="clickable" class="clickable"
on:click={handlePrevClick} on:click={showPrevPage}
>&lt;</span> >&lt;</span>
</div> </div>
{/if} {/if}
@@ -116,7 +143,7 @@
<div class="side-container"> <div class="side-container">
<span <span
class="clickable" class="clickable"
on:click={handleNextClick} on:click={showNextPage}
>&gt;</span> >&gt;</span>
</div> </div>
{/if} {/if}

View File

@@ -24,7 +24,17 @@
/** /**
* Transition speed (ms) * Transition speed (ms)
*/ */
export let speed = 500 export let speed = 500
/**
* Enables auto play of slides
*/
export let autoplay = false
/**
* Auto play change interval
*/
export let autoplaySpeed = 3000
const colors = [ const colors = [
'#e5f9f0', '#e5f9f0',
@@ -47,6 +57,8 @@
{slidesToShow} {slidesToShow}
{initialPage} {initialPage}
{speed} {speed}
{autoplay}
{autoplaySpeed}
> >
{#each colors as color (color)} {#each colors as color (color)}
<div <div