键盘常用的监听器包括keydown
、keyup
、keypress
,在回调函数中,我们能拿到键盘事件KeyboardEvent
,那么如何根据事件属性来判断用户的按键呢?
首先,以前常用的KeyboardEvent.keyCode
已经废弃,同样废弃的还有KeyboardEvent.charCode
和KeyboardEvent.keyIdentifier
,未来不可期,就不做研究了。现在有KeyboardEvent.key
和KeyboardEvent.code
可以使用。
KeyboardEvent.code
返回物理键位的键值,可以理解为——它代表键帽的位置。
KeyboardEvent.key
返回键位所代表的键值,可以理解为——它代表键帽上的字。
Shift 组合按键可能会改变KeyboardEvent.key
返回值,比如:
A = a
Shift + A = A
= = =
Shift + = = +
但 Shift 不会改变 KeyboardEvent.code
返回值:
A = KeyA
Shift + A = KeyA
= = Equal
Shift + = = Equal
相同刻字,不同的键位,KeyboardEvent.key
返回相同的值:
Shift = Shift
ShiftRight = Shift
Enter = Enter
NumpadEnter = Enter
而KeyboardEvent.code
返回不同的值:
Shift = ShiftLeft
ShiftRight = ShiftRight
Enter = Enter
NumpadEnter = NumpadEnter
获取用户输入时,建议使用KeyboardEvent.key
;获取固定键位时,建议使用KeyboardEvent.code
。