前端JavaScript中编写键盘事件的实战教学

 更新时间:2026年05月30日 09:22:59   作者:detayun  
在Web开发中,键盘事件是提升用户体验最直接的手段之一,本文系统介绍了Web开发中键盘事件的应用与最佳实践,讲清楚键盘事件怎么写,怎么用以及有哪些坑

在Web开发中,键盘事件是提升用户体验最直接的手段之一。特别是在工具类页面(如验证码识别、图片浏览),合理的快捷键能让操作效率翻倍。

本文从基础到实战,讲清楚键盘事件怎么写、怎么用、有哪些坑。

一、三个事件的区别

事件触发时机适用场景
keydown按下按键时立刻触发推荐,响应最快,能拿到e.key
keyup松开按键时触发需要判断按键时长时用
keypress按下并产生字符时触发⚠️ 已废弃,不要用

结论:99%的场景用 keydown 就够了。

二、基础写法

document.addEventListener('keydown', function(e) {
    console.log(e.key);        // 按下的键,如 "a", "Enter", "ArrowLeft"
    console.log(e.code);       // 物理键位,如 "KeyA", "Space", "ArrowLeft"
    console.log(e.shiftKey);   // 是否同时按了Shift
});

e.key vs e.code 怎么选?

  • e.key → 读的是"字符",aA 都返回 "a"(配合Shift)
  • e.code → 读的是"物理键",永远返回 "KeyA"

做快捷键,用 e.key 更方便,因为不用判断大小写。

三、实战:验证码识别页面的快捷键

这是我们实际项目中的完整实现:

document.addEventListener('keydown', function(e) {
    // 关键:避免在输入框中触发
    if (e.target.tagName === 'INPUT' || e.target.tagName === 'TEXTAREA') {
        return;
    }

    switch (e.key) {
        case 'a':
        case 'A':
            e.preventDefault();
            left_handed();   // 左旋1°
            break;
        case 'd':
        case 'D':
            e.preventDefault();
            right_handed();  // 右旋1°
            break;
        case 'ArrowLeft':
            e.preventDefault();
            last_img();      // 上一张
            break;
        case 'ArrowRight':
            e.preventDefault();
            next_img();      // 下一张
            break;
        case 'Enter':
            e.preventDefault();
            identify();      // 识别
            break;
        case 's':
        case 'S':
            e.preventDefault();
            save_img();      // 保存
            break;
    }
});

为什么要加e.preventDefault()?

不加的话,按 Enter 会触发表单提交,按方向键会滚动页面。preventDefault() 阻止浏览器默认行为,把按键完全交给你的代码。

四、加个滚轮切换,效率再提一档

键盘之外,鼠标滚轮也能绑定:

document.addEventListener('wheel', function(e) {
    if (e.target.tagName === 'INPUT' || e.target.tagName === 'TEXTAREA') {
        return;
    }

    e.preventDefault();  // 必须加,否则页面会跟着滚

    if (e.deltaY > 0) {
        next_img();      // 滚轮向下 → 下一张
    } else {
        last_img();      // 滚轮向上 → 上一张
    }
}, { passive: false });  // passive: false 是关键

{ passive: false } 不能省。 浏览器默认把 wheel 事件设为 passive: true(性能优化),这时调用 preventDefault() 会被静默忽略,页面照样滚动。

五、三个常见坑

坑1:不判断输入框

用户在输入框里打字,结果触发了快捷键,体验直接崩掉。

if (e.target.tagName === 'INPUT' || e.target.tagName === 'TEXTAREA') {
    return;
}

这行代码必须放在最前面。

坑2:用keypress

keypress 已经被废弃,而且不支持方向键、功能键。别用。

坑3:忘记阻止默认行为

Enter 提交表单、方向键滚动页面、空格键滚动页面……不加 preventDefault(),快捷键和浏览器行为会打架。

六、快捷键设计原则

原则说明
手指移动最小化左手管 A/S,右手管 Enter/方向键
符合直觉← 上一张,→ 下一张,Enter 确认
避免冲突不要用浏览器保留键(F5、Ctrl+S 等)
大小写都支持case 'a': case 'A': 写在一起

总结

键盘事件的核心就三句话:

  1. keydown,拿 e.key 判断按键
  2. preventDefault() 防止默认行为
  3. 第一行判断是否在输入框中

掌握这三点,你就能给任何页面加上流畅的快捷键操作。

到此这篇关于前端JavaScript中编写键盘事件的实战教学的文章就介绍到这了,更多相关JavaScript键盘事件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JS实现在线ps功能详解

    JS实现在线ps功能详解

    这篇文章主要介绍了JS实现在线ps功能详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • javascript实现倒计时小案例

    javascript实现倒计时小案例

    这篇文章主要为大家详细介绍了javascript实现倒计时小案例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • 微信小程序使用uni-app开发小程序及部分功能实现详解

    微信小程序使用uni-app开发小程序及部分功能实现详解

    uni-app是一个使用Vue.js 开发所有前端应用的框架,下面这篇文章主要给大家介绍了关于微信小程序使用uni-app开发小程序及部分功能实现的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • laydate日历控件使用方法详解

    laydate日历控件使用方法详解

    这篇文章主要为大家详细介绍了laydate日历控件的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • JavaScript实现下拉列表

    JavaScript实现下拉列表

    这篇文章主要为大家详细介绍了JavaScript实现下拉列表,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-01-01
  • 微信小程序中的canvas 文字断行和省略号显示功能的处理方法

    微信小程序中的canvas 文字断行和省略号显示功能的处理方法

    大家都知道在canvas中没有提供方法来处理文字的多行问题,只有通过截取指定字符串来达到目的。接下来通过本文给大家介绍微信小程序中的canvas 文字断行和省略号显示功能 ,需要的朋友可以参考下
    2018-11-11
  • 一文了解你不知道的JavaScript生成器篇

    一文了解你不知道的JavaScript生成器篇

    ES6引入了一个新的函数类型,发现它并不符合这种运行到结束的特性。这类新的函数被称为生成器。生成器的出现是我们知道原来有时代码并不会顺利的运行,可以通过暂停的方式进行异步回调,让我们摒弃了此前的认知。本文就来聊聊JavaScript中生成器的相关知识
    2022-11-11
  • Bootstrap图片轮播效果详解

    Bootstrap图片轮播效果详解

    这篇文章主要为大家详细介绍了Bootstrap图片轮播效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • 前端构建工具之gulp的语法教程

    前端构建工具之gulp的语法教程

    这篇文章主要给大家介绍了关于前端构建工具之gulp语法的相关资料,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来跟着小编一起学习学习下吧。
    2017-06-06
  • JS前端知识点 运算符优先级,URL编码与解码,String,Math,arguments操作整理总结

    JS前端知识点 运算符优先级,URL编码与解码,String,Math,arguments操作整理总结

    这篇文章主要介绍了JS前端知识点 运算符优先级,URL编码与解码,String,Math,arguments操作,结合实例形式整理总结了javascript运算符优先级,URL编码与解码,String,Math,arguments操作原理及使用技巧,需要的朋友可以参考下
    2019-06-06

最新评论