По сути, я работаю над проектом слайд-шоу, где каждый «слайд» загружается динамически с помощью <svelte:component this={currentSelection.component} />
. Каждый слайд требует пользовательских входных и выходных переходов для каждого компонента в отдельности. Мне бы хотелось, чтобы следующий слайд "ждал", пока текущий слайд завершит переход, однако, как указано в документации svelte:
В отличие от transition :, переходы применяются с in: и out: не являются двунаправленными - переходный процесс будет продолжать «играть» вместе с исходным переходом , а не наоборот, , если блок отменен во время перехода . Если исходящий переход прерван, переходы будут перезапущены с нуля.
Есть ли разумный способ заставить следующий слайд "подождать", пока текущий слайд не будет завершен с его внешним переходом?
Пример игрушки на REPL
Код игрушки, опубликованный для потомков:
//App.svelte
<script>
import RedThing from './RedThing.svelte';
import GreenThing from './GreenThing.svelte';
import BlueThing from './BlueThing.svelte';
const slides = [
RedThing,
BlueThing,
GreenThing
];
let currentComponent = 0;
const prev = () => currentComponent--;
const next = () => currentComponent++;
</script>
<button on:click={prev}>Prev</button><button on:click={next}>Next</button>
<div>
<svelte:component this={slides[currentComponent]}/>
</div>
//RedThing.svelte
<script>
import { fly, slide } from 'svelte/transition';
</script>
<style>
div { color: red; }
</style>
<div in:fly out:slide>red thing</div>
//GreenThing.svelte
<script>
import { fade, slide } from 'svelte/transition';
</script>
<style>
div { color: green; }
</style>
<div in:slide out:fade>green thing</div>
//BlueThing.svelte
<script>
import { scale, fade } from 'svelte/transition';
</script>
<style>
div { color: blue; }
</style>
<div in:scale out:fade>blue thing</div>
Редактировать: я должен добавить усложнение - Я веду прохождение компонентов через теги-якоря, которые занимаются созданием / уничтожением компонентов. Другими словами:
<a href={prev} id="previous-button">Previous</a>
<a href={next} id="next-button">Next</a>
<div>
<svelte:component this={slides[currentComponent]}/>
</div>
Я не уверен, имеет ли это значение?