当前位置:首页 > JavaScript

js怎么实现组合键

2026-01-31 09:12:11JavaScript

监听键盘事件

在JavaScript中实现组合键功能,主要通过监听键盘的keydownkeyup事件。组合键的核心逻辑是记录当前按下的键,并在特定组合满足时触发相应操作。

let keysPressed = {};

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

    // 检测组合键 Ctrl + S
    if (keysPressed['Control'] && event.key === 's') {
        event.preventDefault(); // 阻止默认保存行为
        console.log('Ctrl + S pressed');
    }
});

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

使用事件对象的属性

事件对象提供了ctrlKeyshiftKeyaltKeymetaKey等属性,可以直接判断是否按下了这些修饰键。

document.addEventListener('keydown', (event) => {
    if (event.ctrlKey && event.key === 'c') {
        console.log('Ctrl + C pressed');
    }
});

支持多键组合

如果需要支持多个非修饰键的组合(例如 A + B),可以通过维护一个按下键的集合来实现。

const activeKeys = new Set();

document.addEventListener('keydown', (event) => {
    activeKeys.add(event.key);

    if (activeKeys.has('a') && activeKeys.has('b')) {
        console.log('A + B pressed');
    }
});

document.addEventListener('keyup', (event) => {
    activeKeys.delete(event.key);
});

封装为可复用函数

将组合键检测逻辑封装成函数,方便重复使用。

function registerCombo(comboKeys, callback) {
    const pressedKeys = new Set();

    document.addEventListener('keydown', (event) => {
        pressedKeys.add(event.key.toLowerCase());

        const allPressed = comboKeys.every(key => 
            pressedKeys.has(key.toLowerCase())
        );

        if (allPressed) {
            callback(event);
            event.preventDefault();
        }
    });

    document.addEventListener('keyup', (event) => {
        pressedKeys.delete(event.key.toLowerCase());
    });
}

// 使用示例
registerCombo(['control', 's'], () => {
    console.log('Custom Ctrl + S handler');
});

注意事项

  • 事件阻止:某些组合键(如 Ctrl + S)会触发浏览器默认行为,需调用event.preventDefault()阻止。
  • 大小写敏感:键盘事件中字母键的event.key区分大小写,建议统一转换为小写处理。
  • 清理状态:务必在keyup时清理按键状态,避免残留导致误判。

js怎么实现组合键

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

相关文章

js实现vue

js实现vue

Vue.js 简介 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。其核心库专注于视图层,易于与其他库或现有项目整合。 实现 Vue.js 的基本步骤 安装 Vue.j…

js实现复制

js实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js实现倒计时

js实现倒计时

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

js实现全选

js实现全选

实现全选功能的方法 在JavaScript中实现全选功能通常涉及监听全选复选框的点击事件,并根据其状态控制其他复选框的选中状态。以下是几种常见的实现方式: 基础DOM操作实现 通过获取所有目标复选框…

jquery.js

jquery.js

jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互等操作。以下是关于 jQuery.js 的核心信息和使用方法: 获取 j…

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…