实现思路
- 使用CSS过渡:利用CSS的
transition
属性来定义滑动和渐隐效果。例如,通过改变opacity
(透明度)实现渐隐,通过改变transform
的translateY
(垂直位移)实现滑动。
- Svelte过渡指令:Svelte提供了
transition
指令,可用于为元素添加过渡效果。将该指令应用于列表项。
- 数据更新同步:在删除列表项时,确保过渡效果的触发与数据更新协调。可以通过在删除操作时,先设置一个中间状态,让过渡效果完成后再真正从数据中移除该项。
主要Svelte代码结构
<script>
let items = ['item1', 'item2', 'item3'];
const fadeAndSlide = {
duration: 300,
css: t => `
opacity: ${t};
transform: translateY(${100 * (1 - t)}px);
`
};
function removeItem(index) {
// 先设置为中间状态,触发过渡
items[index] = null;
setTimeout(() => {
// 过渡完成后,真正从数据中移除
items = items.filter((_, i) => i!== index);
}, 300);
}
</script>
<ul>
{#each items as item, index}
{#if item}
<li transition:fadeAndSlide on:click={() => removeItem(index)}>{item}</li>
{/if}
{/each}
</ul>
确保过渡效果与数据更新同步
- 中间状态设置:在
removeItem
函数中,先将即将删除的列表项设为null
,这会触发Svelte的过渡效果(因为列表项的状态发生了变化)。
- 定时移除:使用
setTimeout
在过渡效果完成后(这里假设过渡效果时长为300ms),从实际数据中移除该项,从而确保过渡效果与数据更新同步。