当前位置:首页 > 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:

js怎么实现组合键

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

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

相关文章

js实现倒计时

js实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callbac…

js 实现继承

js 实现继承

原型链继承 通过让子类的原型对象指向父类的实例来实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Par…

js实现列表

js实现列表

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

js实现授权

js实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的JWT令牌…

js 实现跳转

js 实现跳转

使用 window.location.href 进行跳转 通过修改 window.location.href 可以跳转到指定 URL,浏览器会加载新页面: window.location.hre…

js 实现递归

js 实现递归

递归的基本概念 递归是指函数直接或间接调用自身的过程。在JavaScript中,递归通常用于解决可以分解为相似子问题的问题,如阶乘、斐波那契数列、树形结构遍历等。 递归的实现要点 基线条件(Base…