定义快捷方式
一个可组合的应用程序中定义键盘快捷键。
使用情况
使用自动导入的defineShortcuts组合工具定义键盘快捷键。
<script setup lang="ts">
const open = ref(false)
defineShortcuts({
meta_k: () => {
open.value = !open.value
}
})
</script>
- 快捷方式会针对非macOS平台自动调整,将
meta转换为ctrl。 - Composable使用VueUse的
useEventListener来处理keydown事件。 - 有关可用快捷键的完整列表,请参阅API文档。配置中的键不区分大小写,因此
meta_k和meta_K是等效的。
API
defineShortcuts(config: MaybeRef<ShortcutsConfig>, options?: ShortcutsOptions): () => void
为应用程序定义键盘快捷键。返回一个删除侦听器的函数,以防您需要在卸载组件之前停止快捷键。
Parameters
config
MaybeRef<ShortcutsConfig> required
一个对象,其中键是快捷方式定义,值是处理程序函数或快捷方式配置对象。传递一个
ref以被动地更新快捷方式。值为false、null或undefined将跳过该快捷方式,这就是您有条件地启用快捷方式的方式。options
ShortcutsOptions
快捷方式行为的可选配置。
chainDelay
number
将快捷方式视为链接的两次按键之间的延迟时间。请将此延迟时间设置为
800。layoutIndependent
boolean
启用后,快捷键通过匹配物理键位置而不是字符值,在不同的键盘布局(阿拉伯语、希伯来语)中一致地工作。
false(默认):使用e.key进行基于字符的匹配(布局特定)true:使用e.code进行物理键匹配(布局不可知)
php定义
快捷方式使用以下格式定义:
- 单键:
'a'、'b'、'1'、'?'等 - key组合:使用
_来分隔键,例如'meta_k'、'ctrl_shift_f' - 关键序列:使用
-定义序列,例如:'g-d'
Modifiers
meta/command:在macOS上代表⌘ Command,在其他平台上代表Ctrlctrl:在所有平台上代表Ctrlshift:当需要Shift时用于字母键alt/option:在macOS上代表⌥ Option,在其他平台上代表Alt。根据物理键位置匹配,因为Option在macOS上重写字符
特殊钥匙
使用这些名称匹配特殊键。
escape:按ESC键触发enter:按Enter键触发arrowleft、arrowright、arrowup、arrowdown:按相应箭头键触发tab:Tab键触发backspace:按退格键触发delete:按Delete键触发space:在空格键上触发。需要layoutIndependent,除非与alt结合使用
### 配置
每个快捷键都可以定义为具有以下属性的函数或对象:
interface ShortcutConfig { handler: (e?: KeyboardEvent) => void; usingInput?: boolean | string }
Parameters
handler
(e?: KeyboardEvent) => void required
触发快捷方式时要执行的函数。它接收起始的
KeyboardEvent。usingInput
boolean | string
根据输入焦点控制快捷方式何时触发:
false(默认值):仅当没有输入时才触发true:即使聚焦了任何输入,也会触发string:仅当指定的输入(按名称)被聚焦时才触发
示例
基本用法
<script setup lang="ts">
defineShortcuts({
'?': () => openHelpModal(),
'meta_k': () => openCommandPalette(),
'g-d': () => navigateToDashboard()
})
</script>
带输入焦点处理
使用usingInput仅在聚焦特定输入时触发快捷方式。
<template>
<UInput v-model="query" name="queryInput" />
</template>
<script setup lang="ts">
const query = ref('')
defineShortcuts({
enter: {
usingInput: 'queryInput',
handler: () => performSearch()
},
escape: {
usingInput: true,
handler: () => clearSearch()
}
})
</script>
正在从菜单项中提取快捷方式
使用extractShortcuts实用程序自动定义菜单项的快捷方式。