当前位置:首页 > JavaScript

js怎么实现组合键

2026-03-02 00:24:21JavaScript

监听键盘事件

使用 keydownkeyup 事件监听键盘操作。通过 event.keyevent.code 获取按下的键值,避免使用已废弃的 event.keyCode

document.addEventListener('keydown', (event) => {
  console.log('Key pressed:', event.key);
});

document.addEventListener('keyup', (event) => {
  console.log('Key released:', event.key);
});

记录按键状态

创建对象存储当前按下的键状态。在 keydown 时标记为 truekeyup 时标记为 false

const keysPressed = {};

document.addEventListener('keydown', (event) => {
  keysPressed[event.key] = true;
});

document.addEventListener('keyup', (event) => {
  keysPressed[event.key] = false;
});

检测组合键

通过检查多个键的状态实现组合键检测。例如检测 Ctrl + C

document.addEventListener('keydown', (event) => {
  if (event.ctrlKey && event.key === 'c') {
    console.log('Ctrl+C pressed');
    event.preventDefault(); // 阻止默认行为
  }
});

自定义组合键逻辑

实现非修饰键的组合(如 A + B)。通过定时器清除过期的按键状态避免误判。

let lastKeyPressTime = 0;
const COMBO_DELAY = 500; // 组合键间隔毫秒

document.addEventListener('keydown', (event) => {
  const currentTime = Date.now();

  if (keysPressed['a'] && event.key === 'b' && 
      currentTime - lastKeyPressTime < COMBO_DELAY) {
    console.log('A+B combo detected');
  }

  lastKeyPressTime = currentTime;
  keysPressed[event.key] = true;
});

完整示例代码

const comboKeys = {
  isCtrlCPressed: false,
  isABComboPressed: false,
  lastKeyTime: 0
};

document.addEventListener('keydown', (e) => {
  // Ctrl + C 检测
  if (e.ctrlKey && e.key === 'c') {
    comboKeys.isCtrlCPressed = true;
    console.log('Ctrl+C pressed');
    e.preventDefault();
  }

  // A+B 组合检测
  const now = Date.now();
  if (e.key === 'a' || e.key === 'b') {
    if (now - comboKeys.lastKeyTime < 500) {
      comboKeys.isABComboPressed = true;
      console.log('A+B combo pressed');
    }
    comboKeys.lastKeyTime = now;
  }
});

document.addEventListener('keyup', (e) => {
  if (e.key === 'Control') comboKeys.isCtrlCPressed = false;
});

注意事项

  • 浏览器可能已占用某些组合键(如 Ctrl+S
  • 移动端设备对组合键支持有限
  • 不同键盘布局可能导致键位识别差异
  • 使用 event.preventDefault() 需谨慎,可能影响默认功能

高级技巧

对于复杂场景可考虑使用键盘事件库(如 keymaster.jsmousetrap.js)。这些库提供更简洁的API:

Mousetrap.bind('ctrl+c', () => {
  console.log('Ctrl+C with library');
  return false;
});

js怎么实现组合键

标签: 组合键js
分享给朋友:

相关文章

js实现验证

js实现验证

验证表单输入 使用JavaScript验证表单输入是常见的需求。可以通过监听表单提交事件,检查输入字段是否符合要求。 document.getElementById('myForm').addEv…

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaS…

js实现vr

js实现vr

使用WebXR API实现VR体验 WebXR是浏览器中实现VR和AR体验的标准API,它取代了早期的WebVR。现代浏览器如Chrome、Edge和Firefox已支持WebXR。 // 初始化W…

js钟表实现

js钟表实现

实现JavaScript钟表的基本方法 创建一个简单的JavaScript钟表可以通过以下步骤完成,涵盖数字和模拟两种形式。 数字钟表实现 HTML结构只需一个显示时间的容器: <div…

js怎么实现异步

js怎么实现异步

异步实现方法 JavaScript中实现异步操作主要通过以下几种方式: Promise Promise是ES6引入的异步解决方案,用于处理异步操作的成功或失败状态。 const promise =…

js图片轮播的实现

js图片轮播的实现

基础图片轮播实现 使用HTML、CSS和JavaScript实现一个简单的图片轮播效果。HTML部分定义轮播容器和图片,CSS负责样式和过渡效果,JavaScript处理逻辑。 <div c…