Add autoplay
This commit is contained in:
@@ -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}
|
||||||
><</span>
|
><</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}
|
||||||
>></span>
|
>></span>
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
|
|||||||
@@ -26,6 +26,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
|
||||||
|
|
||||||
const colors = [
|
const colors = [
|
||||||
'#e5f9f0',
|
'#e5f9f0',
|
||||||
'#ccf3e2',
|
'#ccf3e2',
|
||||||
@@ -47,6 +57,8 @@
|
|||||||
{slidesToShow}
|
{slidesToShow}
|
||||||
{initialPage}
|
{initialPage}
|
||||||
{speed}
|
{speed}
|
||||||
|
{autoplay}
|
||||||
|
{autoplaySpeed}
|
||||||
>
|
>
|
||||||
{#each colors as color (color)}
|
{#each colors as color (color)}
|
||||||
<div
|
<div
|
||||||
|
|||||||
Reference in New Issue
Block a user