js 和 jQuery 监听键盘快捷键

825 阅读3分钟

这是我参与8月更文挑战的第7天,活动详情查看:8月更文挑战

在网站中通过监听用户敲下的快捷键来执行指定的指令,从而提高生产的效率,比如:编写推文是通过快捷键快速实现文字加粗,改变字体大小,又或者在线作图时快速裁剪等等的操作。

键盘事件 KeyboardEvent()

KeyboardEvent 对象描述了用户与键盘的交互。 每个事件都描述了用户与一个按键(或一个按键和修饰键的组合)的单个交互;事件类型keydown, keypress 与 keyup 用于识别不同的键盘活动类型。

window.onload = function() {
    document.addEventListener("keydown", (event) => {
        console.log(event)
    }, false)
}

image.png 上面是按下 f 键返回的参数

属性

altKeyalt 键被按下,返回 true;
ctrlKeyctrl 键被按下,返回 true;
key:返回键的键值,比如:f 键、a 键;
shiftKeyshift 键被按下,返回 true;
keyCode:键码值,Netscape/Firefox/Opera中不支持,不推荐使用;
whichshift 也是键码值,不推荐使用;

方法

keydown:键被按下时触发的事件;
keyup:键被释放(抬起)时触发的事件;

Keycode对照表(键码对照表)

字母和数字键的键码值(keyCode)

按键键码按键键码按键键码按键键码
A65J74S83149
B66K75T84250
C67L76U85351
D68M77V86452
E69N78W87553
F70O79X88654
G71P80Y89755
H72Q81Z90856
I73R82048957

数字键盘上的键的键码值(keyCode)

按键键码按键键码
0968104
1979105
298*106
399+107
4100Enter108
5101-109
6102.110
7103/111

功能键键码值(keyCode)

按键键码按键键码
F1112F7118
F2113F8119
F3114F9120
F4115F10121
F5116F11122
F6117F12123

控制键键码值(keyCode)

按键键码按键键码按键键码按键键码
BackSpace8Esc27Right Arrow39-_189
Tab9Spacebar32Dw Arrow40.>190
Clear12Page Up33Insert45/?191
Enter13Page Down34Delete46`~192
Shift16End35Num Lock144[{219
Control17Home36;:186|220
Alt18Left Arrow37=+187]}221
Cape Lock20Up Arrow38,<188'"222

多媒体键码值(keyCode)

按键键码
音量加175
音量减174
停止179
静音173
浏览器172
邮件180
搜索170
收藏171

js 监听键盘事件

js 可以使用 document.addEventListener 监听各种事件

// js
window.onload = function() {
    document.addEventListener("keydown", (event) => {
        const keyname = event.key.toLocaleLowerCase();
        if (event.ctrlKey && keyname === 'c') {
            alert(`ctrl + ${keyname}`)
        } else if (event.ctrlKey && event.altKey && keyname === 'd') {
            alert(`ctrl + alt + ${keyname}`)
        }
    }, false)
}

上面的代码就是当键盘按下 ctrl + c 或者 ctrl + alt + d 都会执行相应的操作

jQuery 的写法跟 js 的类似,也有 keydownkeyup 事件

// jQuery
$(function() {
   $(document).keydown(function (event) {
        const keyname = event.key.toLocaleLowerCase();
        if (event.ctrlKey && keyname === 'b') {
            alert(`ctrl + ${keyname}`)
        } else if (event.ctrlKey && event.altKey && keyname === 'x') {
            alert(`ctrl + alt + ${keyname}`)
        }
   }) 
})

上面的代码也是当键盘按下 ctrl + b 或者 ctrl + alt + x 执行相应的操作

文中涉及到的资料

(求关注)

欢迎关注我的公众号:A纲 Coder,获得日常干货推送。最后再次感谢您的阅读,我是程序猿憨憨