基本を学習したので、次は Svelte の高度なテクニックを学ぶ時間です。まずは motion から始めましょう。
値を設定して DOM が自動的に更新されるのを見るのは最高です。もっと最高なのは?それらの値を トゥイーン(Tween) することです。Svelte には、変化を表すアニメーションを用いたスムーズなユーザーインターフェースを構築するためのツールがあります。
まず progress
store を tweened
store に変更してみましょう。
App.svelte
<script>
import { tweened } from 'svelte/motion';
const progress = tweened(0);
</script>
ボタンをクリックすると、プログレスバーが新しい値にアニメーションします。しかし、これは少し機械的で満足感がありません。イージング機能を追加する必要があります。
App.svelte
<script>
import { tweened } from 'svelte/motion';
import { cubicOut } from 'svelte/easing';
const progress = tweened(0, {
duration: 400,
easing: cubicOut
});
</script>
svelte/easing
モジュールには Penner easing equations が含まれています、あるいはp
とt
の両方が 0 から 1 の間の値を取る独自のp => t
関数を指定することもできます。
tweened
で利用可能なオプションの一覧です。
delay
— トゥイーン開始までのミリ秒duration
— ミリ秒単位のトゥイーンの持続時間、または(例えば値の変化が大きい場合に、より長いトゥイーンを指定出来るようにするための)(from, to) => milliseconds
関数easing
—p => t
関数interpolate
— 任意の値の間を補間するための自前の(from, to) => t => value
関数。デフォルトでは、Svelte は数値や日付、同じ形の配列やオブジェクトの間を補間します (数値や日付、その他の有効な配列やオブジェクトのみを含む場合に限ります)。(例えば) 色文字列や変換行列を補間したい場合は、自前の関数を指定してください。
これらのオプションを progress.set
や progress.update
に第2引数として渡すこともでき、どちらの場合もデフォルトを上書きします。set
と update
メソッドは、いずれもトゥイーンが完了した時点で resolve する promise を返します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<script>
import { writable } from 'svelte/store';
const progress = writable(0);
</script>
<progress value={$progress} />
<button on:click={() => progress.set(0)}>
0%
</button>
<button on:click={() => progress.set(0.25)}>
25%
</button>
<button on:click={() => progress.set(0.5)}>
50%
</button>
<button on:click={() => progress.set(0.75)}>
75%
</button>
<button on:click={() => progress.set(1)}>
100%
</button>
<style>
progress {
display: block;
width: 100%;
}
</style>