0

0

JavaScript:掌握键盘事件处理

PHPz

PHPz

发布时间:2023-09-04 11:29:02

|

1522人浏览过

|

来源于php中文网

原创

javascript:掌握键盘事件处理

网站开发人员希望读者以某种方式与他们的网站进行交互。访问者可以上下滚动页面、在输入字段中写入内容、单击链接访问另一个页面,或者按组合键触发特定行为。作为开发人员,您应该能够捕获所有这些事件并向用户提供所需的功能。

在本教程中,我们的重点将是在 JavaScript 中处理键盘事件。我们将了解不同类型的键盘事件、处理特殊按键事件以及获取有关按下或释放的按键的信息。

键盘事件类型

键盘事件分为三种类型。这些称为 keydownkeypresskeyup

只要按下某个键,就会触发 keydown 事件。所有键都会被触发。它们是否产生角色价值并不重要。例如,按键盘上的 AAlt 键将触发 keydown 事件。

立即学习Java免费学习笔记(深入)”;

keypress 事件已弃用。它仅在按下产生字符值的键时触发。例如,按 A 键将触发此事件,但按 Alt 键则不会。您应该考虑使用 keydown 事件来代替它。

当用户按下的键被释放时,将触发 keyup 事件。

假设用户连续按下键盘上的任意键。在这种情况下,keydown 事件将被重复触发。一旦用户释放密钥,就会触发 keyup 事件。

监听键盘事件

此时,我想提一些相当明显的事情。键盘是一种输入设备,用于从用户那里获取一些输入。我们根据该输入采取行动。但是,用户还有其他方式发送输入。

如果您想跟踪用户在表单中填写的任何输入字段,那么在所述输入上使用其他事件(例如 change )更有意义。

此外,键盘事件仅为可以接收焦点的元素生成。这包括 元素、 元素、

元素以及具有 contentEditabletabindex 属性的其他元素。

例如,除非设置 tabindexcontentEditable 属性,否则您将无法侦听段落元素上的键盘事件。但是,它最终会在 DOM 树中冒泡,因此您仍然可以将 keydownkeyup 事件侦听器附加到文档。

这是一个例子:

document.addEventListener("keydown", keyIsDown);

function keyIsDown(event) {
    // Do whatever you want!
}

您还可以将回调作为箭头函数提供:

document.addEventListener("keydown", (event) => {
    // Do whatever you want!
});

从键盘事件获取信息

在上一节的基本代码片段中,我们定义了一个回调函数。该函数接受 event 对象作为其参数。此 event 对象包含您可能需要访问的与 keydownkeyup 事件相关的所有信息。

以下是您应该了解的一些有用属性:

  1. key:该属性返回一个字符串,表示所按键的字符值。
  2. code:此属性返回一个字符串,表示按下的物理键的代码。
  3. repeat:如果长时间按住某个键,该属性将返回布尔值 true,导致 keydown 事件多次触发。
  4. altKey:如果用户按下 Alt 键(在 Windows 上)或 Option 键(在在 macOS 上)当 keydown 事件触发时。
  5. ctrlKey:如果用户在 keydown 事件触发时按下 Control 键,则此属性返回布尔值 true
  6. metaKey:如果用户在 keydown 事件触发时按下 Meta 键,则此属性返回布尔值 true
  7. shiftKey:如果用户在 keydown 事件触发时按下 Shift 键,则此属性返回布尔值 true

您会注意到,我在所有最后四个属性描述中都包含了“当 keydown 事件被触发时”部分。这意味着,如果在执行上述任一操作时按下 A3 等键,这些属性的值将为 true ,用于 keydown 事件。键也处于按下状态。

造次
造次

Liblib打造的AI原创IP视频创作社区

下载

重点关注以下 CodePen 演示后,尝试按单个键或组合键,以查看不同属性的值发生变化。

如果您按键盘顶部的 3 键而不按 Shift 键,则 key 属性的值将变为 3 > 并且 code 属性的值变为 Digit3。但是,按下 Shift 后,key 属性的值将变为 #,而 code 属性仍为 Digit3

您可以尝试使用其他组合键进行相同的操作,您会注意到 key 属性的值会根据您按下的键而变化。但是,code 属性的值保持不变。

键盘上的某些键通常是重复的。例如,有两个 Shift 键。按左键会将 code 的值设置为 ShiftLeft。按右边会将 code 的值设置为 ShiftRight。同样,有两组数字键。字母上方的代码将为您提供 Digit 代码,而数字键盘上的代码将为您提供 Numpad 代码。

这意味着,如果您的代码依赖于检测特定键,则务必确保您使用 code 属性来检查按下了哪个键。

我想提的另一件重要的事情是,并不是每个人都使用 QWERTY 键盘,而且他们的键盘甚至可能不是英文的。在这种情况下,使用 key 属性来检查按下了哪个键很容易出错。

响应键盘事件

现在我们知道了如何监听键盘事件并从中提取信息,我们可以编写一些代码来对某些特定键的 keydownkeyup 事件做出反应。考虑以下代码片段:

const circle = document.querySelector(".circle");

document.addEventListener("keydown", (event) => {
    
  if (event.code == "KeyR" && event.repeat != true) {
    let rVal = Math.floor(200 + Math.random() * 200);
    circle.setAttribute("style", `width: ${rVal}px; height: ${rVal}px;`);
  }

  if (event.key == "B" && event.shiftKey == true) {
    let rVal = Math.floor(10 + Math.random() * 40);
    circle.setAttribute("style", `border: ${rVal}px solid orangered;`);
  }

  if (event.code == "ArrowUp" && event.repeat != true) {
    circle.classList.add("animate__animated", "animate__bounce");
  }
});

document.addEventListener("keyup", (event) => {
  if (event.code == "ArrowUp") {
    setTimeout(() => {
      circle.classList.remove("animate__animated", "animate__bounce");
    }, 4000);
  }
});

我们为 keydown 事件创建了一个侦听器,并为 keyup 事件创建了另一个侦听器。这两个事件都附加到 document

keydown 内,我们检查三个不同的密钥。我使用了 R 键的 event.code 属性来向您展示您可以单独按 R 键或与任何修饰键组合使用,并且它仍会将圆的半径更改为随机值。另一方面,我们使用 event.key 属性来检查其值是否为 B。仅当您同时按 ShiftB 时,此块中的代码才会执行​​,因为这种组合会导致 event.key 属性成为大写“B”。

keyup 内,我们检查 ArrowUp 键上的 keyup 事件。一旦钥匙被解除,我们会在四秒的延迟后删除之前附加的类。

以下 CodePen 演示展示了这一切的实际效果:

您应该尝试在上述代码中添加自己的逻辑,以便当用户按下ASW键时圆圈会移动> 和D

最终想法

在本教程中,我们学习了 JavaScript 中键盘事件的基础知识。按下并释放键盘上的按键将分别触发 keydownkeyup 事件。与这些事件关联的 event 对象包含您确定按下了哪个键并采取适当操作所需的所有信息。

请记住,键盘只是众多可能的输入设备之一。因此,使用键盘检测任何输入可能并不总是能达到预期效果。在这种情况下,您应该考虑使用与输入相关的事件。

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
PHP WebSocket 实时通信开发
PHP WebSocket 实时通信开发

本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。

11

2026.01.19

微信聊天记录删除恢复导出教程汇总
微信聊天记录删除恢复导出教程汇总

本专题整合了微信聊天记录相关教程大全,阅读专题下面的文章了解更多详细内容。

71

2026.01.18

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

108

2026.01.16

全民K歌得高分教程大全
全民K歌得高分教程大全

本专题整合了全民K歌得高分技巧汇总,阅读专题下面的文章了解更多详细内容。

152

2026.01.16

C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

58

2026.01.16

java数据库连接教程大全
java数据库连接教程大全

本专题整合了java数据库连接相关教程,阅读专题下面的文章了解更多详细内容。

44

2026.01.15

Java音频处理教程汇总
Java音频处理教程汇总

本专题整合了java音频处理教程大全,阅读专题下面的文章了解更多详细内容。

20

2026.01.15

windows查看wifi密码教程大全
windows查看wifi密码教程大全

本专题整合了windows查看wifi密码教程大全,阅读专题下面的文章了解更多详细内容。

131

2026.01.15

浏览器缓存清理方法汇总
浏览器缓存清理方法汇总

本专题整合了浏览器缓存清理教程汇总,阅读专题下面的文章了解更多详细内容。

45

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号