|
|
@ -157,9 +157,47 @@ function updateOnSelect() { |
|
|
|
// state.canScrollNext = embla.value.canScrollNext() |
|
|
|
// state.canScrollNext = embla.value.canScrollNext() |
|
|
|
} |
|
|
|
} |
|
|
|
onMounted(() => { |
|
|
|
onMounted(() => { |
|
|
|
embla.value = EmblaCarousel(emblaNode.value, { loop: true }) |
|
|
|
embla.value = EmblaCarousel(emblaNode.value, { loop: true }, [createAutoplay(4000)]) |
|
|
|
embla.value.on('select', updateOnSelect) |
|
|
|
embla.value.on('select', updateOnSelect) |
|
|
|
}) |
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function createAutoplay(delay = 4000) { |
|
|
|
|
|
|
|
let embla: any = null |
|
|
|
|
|
|
|
let timer: any = null |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function autoplay() { |
|
|
|
|
|
|
|
stop() |
|
|
|
|
|
|
|
if (!embla) return |
|
|
|
|
|
|
|
timer = setInterval(() => { |
|
|
|
|
|
|
|
if (!embla) return |
|
|
|
|
|
|
|
if (!embla.canScrollNext()) { |
|
|
|
|
|
|
|
embla.scrollTo(0) // 回到第一张 |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
embla.scrollNext() |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}, delay) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function stop() { |
|
|
|
|
|
|
|
if (timer) clearInterval(timer) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return { |
|
|
|
|
|
|
|
name: 'autoplay', |
|
|
|
|
|
|
|
options: {}, |
|
|
|
|
|
|
|
init(emblaApi: any) { |
|
|
|
|
|
|
|
embla = emblaApi |
|
|
|
|
|
|
|
autoplay() |
|
|
|
|
|
|
|
embla.on('pointerDown', stop) |
|
|
|
|
|
|
|
embla.on('pointerUp', autoplay) |
|
|
|
|
|
|
|
embla.on('destroy', stop) |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
destroy() { |
|
|
|
|
|
|
|
stop() |
|
|
|
|
|
|
|
embla = null |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
</script> |
|
|
|
</script> |
|
|
|
|
|
|
|
|
|
|
|
<style> |
|
|
|
<style> |
|
|
|