【发布时间】:2021-07-10 00:36:48
【问题描述】:
我有一个要隐藏/显示的输入字段,并通过淡入淡出和滑动过渡来实现。我想出了两个例子,但都有各自的缺点,我想知道是否有更优雅的解决方案。
我只需要回答这两个问题之一,因为它们都可以解决我的问题。
问题 1:有没有办法为一个转换指令触发多个转换?
问题2:如何在if语句将元素放入DOM之后添加一个触发普通css-transition的类?
示例 1
Svelte 不允许在同一个元素上进行两个过渡。所以一种解决方案是嵌套两个元素,如下所示。有没有一种方法可以同时使用淡入淡出和滑动 transition:myMultiTransition 编写自定义过渡?
{#if active === true}
<span transition:fade>
<span transition:slide>
<input type="text" />
</span>
</span>
{/if}
示例 2
在我的其他解决方案中,我只是使用普通的 css 转换来切换一个活动类。这里的问题是 <input>-field 永远不会离开 DOM。它的高度为 0px,但将其留在那里似乎是错误的。
如何使用{#if active === true} 成功显示输入字段,然后添加一个触发过渡效果的类? Svelte 似乎添加了应该在元素进入 DOM 之前触发转换的活动类。
我尝试以各种组合方式使用await tick()、onMount、beforeUpdate,但没有成功。
当使用 setTimeout 添加具有延迟的类时,它可以工作 - 但我不喜欢这种解决方案,因为如果时间不准确,它可能会失败,而且我不希望在过渡开始之前有延迟。
<span class:{active}>
<input type="text" />
</span>
<style>
.active {
// Normal transition: opacity 1s etc ...
}
</style>
REPL
https://svelte.dev/repl/89cb7d26d9484d0193b4bc6bf59518ef?version=3.38.3
【问题讨论】:
标签: css svelte-3 svelte-transition