• 主页

  • 投资

  • IT

    🔥
  • 设计

  • 销售

  • 共299篇

    前端 - Javascript

关闭

返回栏目

关闭

返回前端 - Javascript栏目

121 - 键盘事件 - keydown 和 keyup - 按键按下与释放事件

作者:

贺及楼

成为作者

更新日期:2025-02-21 19:57:13

键盘事件 - keydown 和 keyup - 按键按下与释放事件

在前端开发中,与用户进行交互是至关重要的,而键盘操作是用户与网页交互的重要方式之一。JavaScript 提供了一系列键盘事件,其中 keydownkeyup 事件是处理按键按下与释放操作的关键事件。本文将深入探讨这两个事件的特性、用法以及实际应用场景。

1. keydownkeyup 事件概述

  • keydown 事件:当用户按下键盘上的任意按键时触发该事件。如果用户持续按住某个按键,keydown 事件会连续触发,直到按键被释放。
  • keyup 事件:当用户释放键盘上已经按下的按键时触发该事件。每个按键按下并释放的过程中,keyup 事件只会触发一次。

2. 事件绑定方式

在 JavaScript 中,我们可以通过多种方式为元素绑定 keydownkeyup 事件,以下是常见的几种方法:

2.1 HTML 内联事件处理程序

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <body>
  4. <input type="text" id="myInput" onkeydown="handleKeyDown(event)" onkeyup="handleKeyUp(event)">
  5. <script>
  6. function handleKeyDown(event) {
  7. console.log('Key down:', event.key);
  8. }
  9. function handleKeyUp(event) {
  10. console.log('Key up:', event.key);
  11. }
  12. </script>
  13. </body>
  14. </html>

2.2 DOM 元素的事件属性

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <body>
  4. <input type="text" id="myInput">
  5. <script>
  6. const input = document.getElementById('myInput');
  7. input.onkeydown = function (event) {
  8. console.log('Key down:', event.key);
  9. };
  10. input.onkeyup = function (event) {
  11. console.log('Key up:', event.key);
  12. };
  13. </script>
  14. </body>
  15. </html>

2.3 addEventListener 方法

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <body>
  4. <input type="text" id="myInput">
  5. <script>
  6. const input = document.getElementById('myInput');
  7. input.addEventListener('keydown', function (event) {
  8. console.log('Key down:', event.key);
  9. });
  10. input.addEventListener('keyup', function (event) {
  11. console.log('Key up:', event.key);
  12. });
  13. </script>
  14. </body>
  15. </html>

推荐使用 addEventListener 方法,因为它允许为同一个元素的同一个事件绑定多个处理程序,并且遵循事件驱动编程的最佳实践。

3. 事件对象属性

keydownkeyup 事件触发时,会传递一个事件对象作为参数给事件处理函数。这个事件对象包含了许多有用的属性,以下是一些常用的属性:
| 属性 | 描述 |
| —— | —— |
| key | 返回按下或释放的按键的字符串表示,例如 "a""Enter" 等。 |
| code | 返回按键的物理位置代码,例如 "KeyA""Enter" 等,不同键盘布局下 code 属性值是固定的。 |
| altKey | 布尔值,表示按下按键时 Alt 键是否同时被按下。 |
| ctrlKey | 布尔值,表示按下按键时 Ctrl 键是否同时被按下。 |
| shiftKey | 布尔值,表示按下按键时 Shift 键是否同时被按下。 |

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <body>
  4. <input type="text" id="myInput">
  5. <script>
  6. const input = document.getElementById('myInput');
  7. input.addEventListener('keydown', function (event) {
  8. console.log('Key:', event.key);
  9. console.log('Code:', event.code);
  10. console.log('Alt Key:', event.altKey);
  11. console.log('Ctrl Key:', event.ctrlKey);
  12. console.log('Shift Key:', event.shiftKey);
  13. });
  14. </script>
  15. </body>
  16. </html>

4. 实际应用场景

4.1 快捷键功能

通过监听 keydown 事件,结合 ctrlKeyaltKey 等属性,我们可以实现快捷键功能。例如,按下 Ctrl + S 保存表单数据:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <body>
  4. <form id="myForm">
  5. <input type="text" name="username" placeholder="Username">
  6. <input type="password" name="password" placeholder="Password">
  7. </form>
  8. <script>
  9. document.addEventListener('keydown', function (event) {
  10. if (event.ctrlKey && event.key === 's') {
  11. event.preventDefault(); // 阻止默认的保存页面操作
  12. const form = document.getElementById('myForm');
  13. // 模拟保存表单数据
  14. console.log('Form data saved:', form.serialize());
  15. }
  16. });
  17. </script>
  18. </body>
  19. </html>

4.2 游戏控制

在网页游戏中,keydownkeyup 事件可以用于控制游戏角色的移动。例如,按下方向键控制角色移动,释放按键停止移动:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <style>
  5. #character {
  6. width: 50px;
  7. height: 50px;
  8. background-color: red;
  9. position: absolute;
  10. left: 0;
  11. top: 0;
  12. }
  13. </style>
  14. </head>
  15. <body>
  16. <div id="character"></div>
  17. <script>
  18. const character = document.getElementById('character');
  19. let speed = 5;
  20. let isMovingLeft = false;
  21. let isMovingRight = false;
  22. let isMovingUp = false;
  23. let isMovingDown = false;
  24. document.addEventListener('keydown', function (event) {
  25. if (event.key === 'ArrowLeft') {
  26. isMovingLeft = true;
  27. } else if (event.key === 'ArrowRight') {
  28. isMovingRight = true;
  29. } else if (event.key === 'ArrowUp') {
  30. isMovingUp = true;
  31. } else if (event.key === 'ArrowDown') {
  32. isMovingDown = true;
  33. }
  34. });
  35. document.addEventListener('keyup', function (event) {
  36. if (event.key === 'ArrowLeft') {
  37. isMovingLeft = false;
  38. } else if (event.key === 'ArrowRight') {
  39. isMovingRight = false;
  40. } else if (event.key === 'ArrowUp') {
  41. isMovingUp = false;
  42. } else if (event.key === 'ArrowDown') {
  43. isMovingDown = false;
  44. }
  45. });
  46. function moveCharacter() {
  47. let left = parseInt(character.style.left) || 0;
  48. let top = parseInt(character.style.top) || 0;
  49. if (isMovingLeft) {
  50. left -= speed;
  51. } else if (isMovingRight) {
  52. left += speed;
  53. }
  54. if (isMovingUp) {
  55. top -= speed;
  56. } else if (isMovingDown) {
  57. top += speed;
  58. }
  59. character.style.left = left + 'px';
  60. character.style.top = top + 'px';
  61. requestAnimationFrame(moveCharacter);
  62. }
  63. moveCharacter();
  64. </script>
  65. </body>
  66. </html>

5. 总结

keydownkeyup 事件是 JavaScript 中处理键盘操作的重要工具,通过监听这两个事件,我们可以实现各种与键盘交互相关的功能,如快捷键、游戏控制等。在实际开发中,我们需要根据具体需求选择合适的事件绑定方式,并合理利用事件对象的属性来实现所需的功能。同时,要注意处理好事件的默认行为,避免出现意外的结果。希望本文对你理解和应用 keydownkeyup 事件有所帮助。