【发布时间】:2020-09-07 20:35:42
【问题描述】:
我有一个显示百分比的进度条,我遇到的问题是它没有正确更新,我试图让它在半秒后从 0 加载,然后随着它的增加显示 $progress 值,但是目前它最初会跃升至 50% 左右,但随后会停留在那里并且不会进一步更新。
我怎样才能让它显示更新的进度?
<script>
import { progress } from '../../store';
let width = 0
setTimeout(() => width = $progress, 500)
$: animatedWidth = width
</script>
<div class="container">
<div class="line">
<div class="animation" style="width: {animatedWidth}%"></div>
</div>
</div>
【问题讨论】:
-
您可以更新商店文件以查看您的进度变量吗?而且我没有看到任何值的更新。
-
$progress 变量在一分钟左右从 0 变为 100,这工作正常,它正在获取这个值,只是组件没有自动刷新,如果页面重新加载它会跳转到正确的位置
-
好吧,
setTimeout只会更新一次width,并且该更新将在代码加载和执行后 500 毫秒发生,但可能在组件甚至安装之前发生,导致没有 视觉更新。您应该使用持续时间较短的setInterval(重复、更频繁的更新),并将其移至 Svelte 的onMount生命周期方法中,以便仅在组件实际安装并可见后才开始更新。使用 Svelte 的destroy生命周期函数进行清理 (clearInterval)。 -
或者,如果您的商店已经在模拟一段时间内的进度,则根本不要使用
setTimeout,而是直接将宽度映射到商店值style="width: {$progress}%"。 -
它直接模拟随着时间的推移但是我需要在动画开始之前添加延迟,我该怎么做?