Skip to main content

Part 3 / Actions / Adding parameters

トランジションやアニメーションのように、アクションは引数を取ることができ、アクション関数はそれが属する要素と一緒に呼び出されます。

ここでは、ユーザがボタンを長押しするたびに同じ名前のイベントを発生させる longpress アクションを使っています。longpress.js ファイルに切り替えると、500msにハードコードされていることがわかります。

アクション関数を変更して、第2引数に duration を指定し、そしてその durationsetTimeout に渡すことができます。

export function longpress(node, duration) {
	// ...

	const handleMousedown = () => {
		timer = setTimeout(() => {
			node.dispatchEvent(new CustomEvent('longpress'));
		}, duration);
	};

	// ...
}

App.svelte に戻り、duration の値をアクションに渡すことができます。

<button use:longpress={duration}

これは、大体 動作します。イベントは2秒後にのみ発生するようになりました。しかし、デュレーションを下にスライドさせても、まだ2秒かかります。

これを変更するには、longpress.jsupdate メソッドを追加します。これは引数が変更されるたびに呼び出されます。

return {
	update(newDuration) {
		duration = newDuration;
	},
	// ...
};

複数の引数をアクションに渡す必要がある場合は、use:longpress={{duration, spiciness}} のように、それらを1つのオブジェクトに結合します。

Next: Advanced bindings

initialising