【发布时间】:2021-11-09 09:36:54
【问题描述】:
我正在使用 svelte-spa-router 开发一个带有全页导航的 Svelte UI。 我面临这样一种情况,即 UX 设计师定义了页面“每个转换”之间的转换,而不是每个页面都应该在 Svelte (AFAIK) 中。
例如在这个 UX 页面 B1 中,过渡将:
- 回到首页A时立即消失;
- 前往C1时向左滑动;
- 去B2时解散。
UX 实际上是有意义的,因为 B1/B2、C1/C2 是相似的,但从不同的角度处理相同的主题。
Svelte 过渡效果很好,但每个组件都定义了一个in 过渡和一个out 过渡。
我尝试利用过渡属性可以是对象和反应性这一事实。
<script>
import { fade } from "svelte/transition";
let page = "A";
let duration = 0;
function goto(dest) {
if(dest == "A" || page == "A") {
duration = 0;
} else {
duration = 400;
}
page = dest;
}
</script>
{#if page == "A"}
<section class="A" transition:fade={{duration: duration}}>
<h1>Page A</h1>
<nav on:click={e => goto("B1")}>Goto B1</nav>
<nav on:click={e => goto("B2")}>Goto B2</nav>
</section>
{:else if page == "B1"}
<section class="B1" transition:fade={{duration: duration}}>
<h1>Page B1</h1>
<nav on:click={e => goto("A")}>Goto Back</nav>
<nav on:click={e => goto("B2")}>Goto B2</nav>
</section>
{:else if page == "B2"}
<section class="B2" transition:fade={{duration: duration}}>
<h1>Page B2</h1>
<nav on:click={e => goto("A")}>Goto Back</nav>
<nav on:click={e => goto("B1")}>Goto B1</nav>
</section>
{/if}
<style>
section {
position: absolute;
width: 500px;
height: 500px;
}
section.A {
background: pink;
}
section.B1 {
background: blue;
}
section.B2 {
background: yellow;
}
</style>
但我不知道如何更改过渡效果(也许是自定义过渡功能?)。 此外,这个解决方案似乎非常复杂、耗时,并且在更复杂的用户体验中真的可能变成一团意大利面。
此外,在 svelte-spa-router 中,我没有找到一种方法来知道我来自哪里(即预览版location)来相应地管理转换。
有什么想法吗?
【问题讨论】:
标签: javascript svelte svelte-3 svelte-transition