KeyboardEvent:按下 'Shift' 时如何获取数字键码?

KeyboardEvent: how to get numeric key code while 'Shift' is pressed?

在我的应用程序中,我需要确定用户是否按下了任何数字键(主键盘或小键盘)以及是否同时按下了 shift/ctrl/alt 键。

我需要这个,因为按下的键代表数组中的数字(从 0 到 9),它应该用这个数字触发一个动作。所以我的逻辑很简单:

@HostListener('document:keydown', ['$event'])
handleKeydownEvent(event: KeyboardEvent) {
  let index = Number(event.key);
  if (isNaN(index)) {
    // skip, for now
  }else{
    doAction(index);
  }
}

我喜欢它,因为它的可读性和透明度。

好像还需要处理'Alt'或'Ctrl',事情就简单了。在这些情况下,event.key 仍然表示按下的键的数字键值(如“1”或“2”)(我可以检查 event.ctrlKey/event.altKey.

但是当我需要考虑 'Shift' 键时,事情变得更加复杂。在这种情况下,event.key 不代表数字键。相反,它代表其他字符,例如“!”或“@”。

我想我可以通过构建地图将其转换为关键代码,但我需要处理键盘布局,因为在某些情况下 Shift+2 最终会变成“@”,在其他情况下 - “” '(俄语版式与英语版式)。

当按下 'Shift' 按钮时,检测按键代码的正确且简单的方法是什么?

谢谢!

选项:

  1. Uisng event.which:它 returns 数值但已弃用。
  2. 你制作地图的想法很酷。要创建地图,请使用“event.code”而不是“event.key”。

EVENT.CODE 是你的救星。