У меня есть анимация, которая зависит от значения доступного для записи хранилища.
Например:
{#if $isWorking}
<span in:fade="{{duration: 200, delay: 750}}">Working...</span>
{/if}
Проблема в том, что если значение хранилища изменяется достаточно быстро, переход не перезапускается. Вот REPL, демонстрирующий это поведение.
Я полагаю, это потому, что Svelte очень эффективен. Я предполагаю, что если значение $isWorking
такое же в начале следующего кадра, Svelte решит, что оно не изменилось, и продолжит переход.
Это похоже на прекрасное поведение по умолчанию , но есть ли способ избежать этого и вручную сбросить анимацию? В этом случае, чтобы перезапустить задержку при изменении хранилища $isWorking
?
Я придумал хак, чтобы избежать использования свойства delay
перехода и реализовать его с помощью setTimeout
:
let show = false;
let timeout;
isWorking.subscribe((value) => {
show = false;
if (timeout) clearTimeout(timeout);
timeout = setTimeout(() => {
showState = true;
}, 750);
});
{#if show}
<span in:fade="{{duration: 200}}">Working</span>
{/if}
Есть ли более изящный способ решить эту проблему?