如何将键盘导航添加到 svelte 应用程序(window 对象除外)?
How do I add keyboard navigation to a svelte app (other than window object)?
我想为我的 svelte 应用程序添加键盘导航。我知道可以使用 svelte 的 window 对象,例如 <svelte:window on:keydown={handleKeydown}/>
。然而,生成的代码并不是很好,因为它将 window 对象的使用分散到整个应用程序中。
理想情况下,我想使用类似于 vue 的语法,其中可以编写 <input v-on:keyup.page-down="onPageDown">
.
在 svelte 中也可以实现类似的功能吗?我错过了任何 svelte 附加组件吗?
您可以将事件侦听器附加到输入元素:
<input on:keyup={handleKeyUp}/>
<script>
function handleKeyUp(event) {
// ..
}
</script>
如果您想要与问题中的语法相同的语法,您可以使用这样的操作:
<input use:keyup={{PageDown: onPageDown}}/>
<script>
import { keyup } from './keyup.js';
function onPageDown() { ... }
</script>
export function keyup(node, map) {
const listener = (e) => { if (map[e.key]) map[e.key](e); }
node.addEventListener("keyup", listener);
return {
destroy() { node.removeEventListener("keyup", listener); }
}
}
我想为我的 svelte 应用程序添加键盘导航。我知道可以使用 svelte 的 window 对象,例如 <svelte:window on:keydown={handleKeydown}/>
。然而,生成的代码并不是很好,因为它将 window 对象的使用分散到整个应用程序中。
理想情况下,我想使用类似于 vue 的语法,其中可以编写 <input v-on:keyup.page-down="onPageDown">
.
在 svelte 中也可以实现类似的功能吗?我错过了任何 svelte 附加组件吗?
您可以将事件侦听器附加到输入元素:
<input on:keyup={handleKeyUp}/>
<script>
function handleKeyUp(event) {
// ..
}
</script>
如果您想要与问题中的语法相同的语法,您可以使用这样的操作:
<input use:keyup={{PageDown: onPageDown}}/>
<script>
import { keyup } from './keyup.js';
function onPageDown() { ... }
</script>
export function keyup(node, map) {
const listener = (e) => { if (map[e.key]) map[e.key](e); }
node.addEventListener("keyup", listener);
return {
destroy() { node.removeEventListener("keyup", listener); }
}
}