如何在带有 shift 的按键事件中获取编号键的原始键映射?

How can I get the original key map of a numbered key in a keypress event with shift?

我希望能够在通过 shift 完成的 onKeypress 事件中获取编号键的值。我正在尝试制作一个网络应用程序,该应用程序将不同的操作与键 123...9 和 shift-123...9 联系起来。问题是,当我通过 shift 获得按键事件时,我只能获得 shift-value 并且如果 shift 为真。

例如shift-1

shiftKey: true
key: "!"

我想找到一种方法从“!”中获取值 1。我还担心其他键盘可能具有除“!”以外的其他字符。当按下 shift-1 时。喜欢AZERTY键盘。
http://mentalfloss.com/article/52483/6-non-qwerty-keyboard-layouts

如何获取 shift-keypress 事件的原始值,就像没有按下 shift 一样?

更新评论回复:

@HostListener('document:keypress', ['$event'])
handleKeyboardEvent(event: KeyboardEvent) {
  let keyNumber = Number.parseInt(event.key);
  if (keyNumber !== NaN && keyNumber !== 0) {
    if (event.shiftKey === false && keyNumber <= this.documents.length) {
      // use number to access some array
      this.currentDocument = this.documents[--keyNumber];
    } else if (keyNumber <= this.currentDocument.toc.length) { // I'll see if they go past 10..
      // PROBLEM HERE trying to get number to also access an array
      this.routeToFragment(this.currentDocument.toc[--keyNumber].slug); // this is NaN until I can convert "!@#$%..("
    }
  }
}

键盘事件将 code 属性 作为其事件对象的一部分 - 这将 return 按下的键,忽略任何修改键。

示例:

document.addEventListener('keypress', (event) => {
  console.log({ code: event.code })
})

/*
[press shift + 1] => // { code: 'Digit1' }
[press shift + /] => // { code: 'Slash' }
*/