我解决问题的方法其实很简单:
我们已经有了一个显示下一个图像的函数,所以我们可以重复调用它。JavaScript已经有了一个(有些可靠的)函数来做到这一点:
setInterval
最后,我的代码看起来是这样的,它的工作原理就像一个视频播放器。您可以通过调整中的延迟来调整速度
setInterval
作用
<script lang="ts">
import { slide } from "svelte/transition";
export let imageDir: string;
export let startIndex = 0;
export let endIndex = 0;
let images = new Array(endIndex - startIndex)
.fill(0)
.map((_, i) => imageDir + "/frame_" + (i + startIndex) + ".jpg");
let currentSlideItem = 0;
let videoPaused = false;
console.log({ videoPaused });
const nextImage = () => {
currentSlideItem = (currentSlideItem + 1) % images.length;
};
const prevImage = () => {
if (currentSlideItem != 0) {
currentSlideItem = (currentSlideItem - 1) % images.length;
} else {
currentSlideItem = images.length - 1;
}
};
const play = () => {
videoPaused = false;
};
const pause = () => {
videoPaused = true;
};
setInterval(() => {
if (!videoPaused) {
nextImage();
}
}, 50);
</script>
<main>
{#each [images[currentSlideItem]] as image, index}
<img
transition:slide={{ delay: 200 }}
src={image}
alt="Blank"
width="1080"
/>
{/each}
<div class="carousel-buttons">
<button id="play" on:click={() => play()}>⏯</button>
<button id="pause" on:click={() => pause()}>⏸</button>
<button id="prev" on:click={() => prevImage()}>⏪</button>
<button id="next" on:click={() => nextImage()}>⏩</button>
</div>
</main>
附加:在您的github中,您发布了
node_modules
文件夹,这实际上给克隆您的repo的人带来了一个问题:他们不能rum
npm run dev
。这就像删除文件夹一样简单,但确实会带来一些不便!