50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | EventKey Codes(键盘码)

📅 我们继续 50 个小项目挑战!------ EventKeyCodes 组件

仓库地址:https://github.com/SunACong/50-vue-projects

项目预览地址:https://50-vue-projects.vercel.app/

使用 Vue 3 的 <script setup> 语法结合 TailwindCSS 构建一个简单的键盘监听组件,展示用户按下任意键时的 keyCode、key 和 code 信息。

🎯 组件目标

  • 监听用户的键盘输入事件。
  • 展示按下的键码(keyCode)、字符(key)和物理键位(code)。
  • 使用 TailwindCSS 美化 UI,保持简洁现代的设计风格。
  • 提供清晰的交互反馈:初始提示信息与按键后的数据展示切换。

⚙️ 技术实现点

技术点 描述
Vue 3 Composition API (<script setup>) 使用响应式变量管理组件状态
事件监听 (window.addEventListener) 监听全局的 keydown 事件
条件渲染 (v-if, v-else) 判断是否已按下按键以切换视图
TailwindCSS 响应式布局 使用类名快速构建美观的 UI

🧱 组件实现

模板结构 <template>

html 复制代码
<template>
    <div class="flex h-screen items-center justify-center text-white">
        <div v-if="noPressKey" class="btn key border-2">Press any key to get the keyCode</div>
        <div v-else class="flex gap-8 text-white">
            <div class="btn w-56 border-2 text-2xl">KeyCode: {{ handleKeyDown.keyCode }}</div>
            <div class="btn w-56 border-2 text-2xl">Key: {{ handleKeyDown.key }}</div>
            <div class="btn w-56 border-2 text-2xl">Code: {{ handleKeyDown.code }}</div>
        </div>
    </div>
</template>

脚本逻辑 <script setup>

js 复制代码
<script setup>
import { ref } from 'vue'

const noPressKey = ref(true)

const handleKeyDown = ref({
    keyCode: 0,
    key: '',
    code: '',
})

// 监听键盘事件,按下任意键时显示键码
window.addEventListener('keydown', (event) => {
    noPressKey.value = false
    handleKeyDown.value.keyCode = event.keyCode
    handleKeyDown.value.key = event.key
    handleKeyDown.value.code = event.code
})
</script>

💡 注意事项:

  • 由于 window.addEventListener 是副作用操作,在生产环境中建议使用 onMounted 生命周期钩子来绑定事件,并在 onUnmounted 中移除监听器,避免内存泄漏。
  • 可以进一步封装为可复用的自定义 Hook,例如 useKeyboardEvent()。

🔍 重点效果实现

动态切换视图

通过 v-if 和 v-else 控制是否已经按下键盘:

  • 初始状态显示"Press any key..."
  • 一旦触发 keydown 事件,隐藏提示并展示三个包含键值的按钮。

键盘事件监听

使用原生 JavaScript 的 window.addEventListener('keydown') 来监听用户按键,并将返回的 keyCode、key、code 更新到响应式对象 handleKeyDown 中,从而触发模板更新。

js 复制代码
window.addEventListener('keydown', (event) => {
    noPressKey.value = false
    handleKeyDown.value.keyCode = event.keyCode
    handleKeyDown.value.key = event.key
    handleKeyDown.value.code = event.code
})

🎨 TailwindCSS 样式重点讲解

类名 作用
flex 启用弹性盒子布局
h-screen 高度为整个视口高度
items-center 垂直居中对齐
justify-center 水平居中对齐
text-white 文字颜色为白色
border-2 边框宽度为 2px
w-56 宽度为 8rem(即 224px)
text-2xl 字体大小为 1.5rem
gap-8 flex 子元素之间间隔为 2rem

这些类名帮助我们快速构建出一个居中的响应式布局,并确保视觉上的一致性和美观性。


📁 常量定义 + 组件路由

constants/index.js 添加组件预览常量:

js 复制代码
{
        id: 11,
        title: 'Event KeyCodes',
        image: 'https://50projects50days.com/img/projects-img/11-event-keycodes.png',
        link: 'EventKeyCodes',
    },

router/index.js 中添加路由选项:

js 复制代码
{
        path: '/EventKeyCodes',
        name: 'EventKeyCodes',
        component: () => import('@/projects/EventKeyCodes.vue'),
    },

🏁 总结

涵盖 Vue 3 的响应式系统、事件监听机制以及 TailwindCSS 的实用样式类。它不仅是一个教学示例,也可以作为开发调试工具的一部分,用于快速查看键盘事件的数据。


👉 下一篇,我们将完成 FAQ Collapse 组件,一个现代化的折叠Q&A面板!🚀

相关推荐
工控丫丫9 分钟前
帆软看板中经常使用的公式函数及经常搭的组合
前端·javascript·数据库
jerrywus29 分钟前
我用 GPT-6.1-sol 做了台会讲解的 3D 售货机:60 罐饮料,一口没喝上
前端·agent·claude
孟陬2 小时前
Foobar 技术周刊#159:当看不懂代码时,如何高效排障调试。脏页陷阱:一条只读查询,写入数 TB 数据。推测解码:大模型加速利器
前端·人工智能·后端
Zhao-Jichao2 小时前
AI Prompting for Everyone 课程笔记 - P17 图像生成 Imaging Generation
前端
Highcharts.js3 小时前
智能数据分析组件Orbit 正式发布与快速上手体验教程
前端·人工智能·信息可视化·数据分析系统·highcharts·orbit·智能可视化
Dream-Y.ocean3 小时前
鸿蒙PC平台星图遥感适配实战:基于 Electron 壳方案的纯 JavaScript 遥感图像处理引擎开发
javascript·electron·harmonyos
螺丝钉tina3 小时前
[Playwright ][16]Playwright + TypeScript API 自动化测试实战:API测试
前端·javascript·typescript
小天源4 小时前
智叟云集系统 · 架构与职责分层
服务器·前端·数据库
Highcharts.js6 小时前
React 中原生支持使用 JSX 组件配置自定义表格 Highcharts Grid
前端·javascript·react.js·前端框架·jsx·highcharts·自定义表格
Java后端的Ai之路6 小时前
【AIAgent开发】-Agent工具封装成CLI(纯干货!!!)
java·javascript·人工智能·agent·cli