職場の朝会でファシリテーターをくじびきツール使って毎朝抽選しているのですが、
そのツールが入力項目を記憶してくれないので、
入力項目をLocalStorageに保存しておくようなくじびきツールを作ってみました
つくったもの

使用した技術
- Sveltekit
- tailwindcss
- Vercel
くじびきのアニメーションについて
Svelteではtransitionアニメーションを簡単にコンポーネントに適用することができます。
例えばリストで transtion:slide
を指定するだけで、リストの追加/削除時にいい感じにぬるっと動いてくれるようになります
{#each items as item}
<div transition:slide class="flex justify-center items-center ">
...
</div>
{/each}
Transitionは用意されているものだけでなく、以下のようにオリジナルのものを設定することもできます
参考: https://svelte.dev/docs#transition_fn
function lotteryAnimation(node, option) {
let items = $lotteryItemStore.filter((item) => item.enabled && item.text);
items = shuffle(items);
return {
duration: 2000,
easing: cubicOut,
tick: (t) => {
const i = ~~(t * 100) % items.length;
node.textContent = items[i].text;
}
};
}
// usage
// <div transition:lotteryAnimation>
transtion:hoge
に指定する関数は以下のように node
option
の二つを引数にとります
transition = (node: HTMLElement, params: any) => {
delay?: number,
duration?: number,
easing?: (t: number) => number,
css?: (t: number, u: number) => string,
tick?: (t: number, u: number) => void
}
tick
関数は 0 - 1 の値 t
を引数にとります
このt
はeasing
に指定された関数によって生成されます
これによって最初は細かく切り替わり、終盤はゆっくり切り替わるような動作を再現することができました🎉
まとめ
もし何かくじ引きなどすることがあれば使っていただけると幸いです。
何かありましたらPRなども投げてもらえると嬉しいです