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

js怎么实现组合键

const keysPressed = {};

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

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

检测组合键

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

js怎么实现组合键

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实现选项卡

实现选项卡的基本思路 选项卡通常由一组标签和对应的内容面板组成。点击标签时,显示对应的内容面板,隐藏其他面板。实现这一效果需要结合HTML结构、CSS样式和JavaScript交互逻辑。 HTML结…

js实现验证

js实现验证

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

js实现点击显示和隐藏

js实现点击显示和隐藏

实现点击显示和隐藏的JavaScript方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…

js实现求导

js实现求导

实现数值求导的方法 在JavaScript中实现求导通常采用数值方法,因为JavaScript不是符号计算语言。以下是常见的数值微分方法: 中心差分法 中心差分法提供较高精度的导数近似:…

js树实现

js树实现

树的基本概念 树是一种非线性的数据结构,由节点和边组成。每个节点包含一个值和指向子节点的引用。树的顶部节点称为根节点,没有子节点的节点称为叶节点。 树的实现方式 在JavaScript中,树可以通过…

js实现交换

js实现交换

交换变量的方法 在JavaScript中,交换两个变量的值有多种方法。以下是常见的几种实现方式: 使用临时变量 通过引入一个临时变量来存储其中一个变量的值,实现交换: let a = 1; le…