Key 按键组件:会亮、能按、可触发事件

介绍一个适合 Astro 博客的 Key 组件,支持组合键展示、macOS 图标风格、键盘按下高亮,以及按键和点击触发 press 事件。

2026年6月19日
推荐阅读 3 分钟
710 字
浏览量
观众数

为什么需要 Key

有些文章不只是展示代码,还会频繁提到快捷键、操作步骤、按键序列或者交互提示。

这个 Key 组件就是为这种场景准备的:它既能像截图里那样把按键渲染成一颗颗小键帽,也能在真正按下对应键位时点亮,还能通过 press 事件把动作抛给页面脚本。现在站内搜索的 Ctrl/Cmd + K 提示也已经用上它了。

效果预览

  • 纯 Code

Esc F2 Ctrl A Space Tab Enter

  • 指定修饰符、图标、文本(macOS 默认自动使用图标)

⌥\\ ⇧⇥ 空格

  • 组合键

Ctrl+Shift+A Shift+Alt ⌃\\

热血组合技

B A

基础用法

最简单的用法就是直接传一个 code

Esc Tab Enter

如果你不想显示原始键名,也可以直接传 text

空格 回车

组合键

修饰符通过布尔属性组合:

Ctrl+K Ctrl+Shift+P Ctrl+K Shift+Alt+A

其中 cmd 是一个“智能修饰键”:

  • 在 Windows / Linux 上显示并匹配 Ctrl
  • 在 macOS 上显示并匹配 Cmd

图标模式

当传入 icon 时,会优先使用图形符号来显示按键;如果运行环境是 macOS,默认也会自动偏向这种写法。

⇧⇥ ⌃K

事件触发

Key 组件除了展示样式,还会真的监听键盘输入:

  • 按下和配置匹配的键时,键帽会高亮
  • 鼠标点击键帽时,也会触发同样的动作
  • 组件节点本身会派发一个 press 自定义事件
  • 如果传入 press="event-name",还会额外向 document 派发同名事件

站内搜索现在就是这样接入的:

<Key cmd code="K" press="post-search:toggle" prevent />

<script is:inline>
  document.addEventListener("post-search:toggle", () => {
    // 打开或关闭搜索框
  });
</script>

上面这颗键帽按下 Ctrl/Cmd + K 时会亮,点击它也会触发同名事件。

Props 一览

属性类型默认值说明
textstring-直接指定显示文本
codestring-要显示和匹配的按键名
iconboolean自动是否优先使用图标符号
ctrlbooleanfalse是否包含 Ctrl
shiftbooleanfalse是否包含 Shift
altbooleanfalse是否包含 Alt
metabooleanfalse是否包含 Meta / Command
winbooleanfalse是否包含 Win
cmdbooleanfalse智能使用 Ctrl / Cmd
preventbooleanfalse触发时调用 preventDefault()
pressstring-document 额外派发的事件名
classstring-额外类名

核心实现

这个组件是一个纯 Astro 组件,但行为层用了一个很轻的内联脚本:

  1. 服务端先输出一份可直接显示的键帽文本
  2. 客户端根据系统环境决定是否替换成 macOS 风格符号
  3. 全局监听 keydown / keyup / blur
  4. 当按键和修饰符都匹配时,给对应键帽加上 active 状态
  5. 再派发组件级 press 事件,以及可选的文档级事件

这样做的好处是:页面不需要引入框架,也不需要额外 hydration,就能拿到接近交互组件的体验。

小结

Key 组件很适合写教程、快捷键说明、搜索提示和操作引导。它既是一个视觉组件,也是一个轻量交互组件;放在 Astro 博客里,既能让文章更好看,也能让页面里的快捷键说明真正活起来。

打赏中心

感谢你赐予我前进的力量

微信 微信
支付宝 支付宝
赞赏者名单 因为你们的支持让我意识到写文章的价值

来过,就留下你的足迹吧!