Javascript - 获取任何键盘布局的关键描述

Alo*_*oso 9 javascript events keyboard-shortcuts keyboard-events

对于富Web应用程序,我需要键盘快捷键.因为有许多不同的键盘布局,所以它们必须是可配置的.不幸的是,我无法找到一种方法将键盘事件映射到人类可读的快捷方式名称,如Ctrl + Alt + YAlt + \.

keypress事件是无用的,因为它不会触发所有键.以下是一些keydown事件属性:

  • charCode:仅适用于可打印字符.据MDN称,已弃用
  • code:Works,但忽略键盘布局.当我按Z键时,我接上code: "KeyY"了德语键盘.
  • key:Works,但根据修饰符给出不同的结果.E. g.Shift + 3 key: "§"在我的键盘和key: "#"大多数美国键盘上产生.
  • keyCode:值不是唯一的.Ä,Ö,Ü或^收益率keyCode: 0.据MDN称,已弃用
  • which:就像keyCode,价值不是唯一的.据MDN称,已弃用
  • altKey,ctrlKey,metaKey,shiftKey:有用用于检测修饰键

我该怎么做?在不知道用户的键盘布局的情况下甚至可能吗?

小智 5

问题是,此时您永远无法从浏览器中知道键盘布局,您只能猜测和推测。尝试某种检测的方法有很多种,但它们总是很复杂,而且不是开箱即用的解决方案。

\n\n

但是,您可以采取一些措施来确定按下了哪个键。

\n\n

所以 Keydown 会给你(假设事件对象是 e):

\n\n

e.code:保存一个字符串,用于标识所按下的物理键。该值不受当前键盘布局或修饰符状态的影响,因此特定键将始终返回相同的值。(来自 mozilla.org)

\n\n

e.key:事件所代表的键的键值。如果该值具有打印表示形式,则该属性的值与char相同

\n\n

e.whiche.keyCode:虽然已弃用,但将为您提供键盘上按键的位置代码,如果 e.charCode 为 0,则这是位置代码(如果 < 256)或 unicode(这意味着键盘已切换为另一种语言)

\n\n

现在棘手的部分是e.key实际上代表unicode字符,如果它是可打印的并且不是来自美国键盘并且不是特殊键。您可以将该字符转换为十进制数并检查该值。如果它是 unicode 字符,则它的十进制值将等于 which 和 keyCode 值。如果是普通的 ASCII,它的小写值将等于 which 和 keyCode 值。另外,在执行此操作(转换)之前,您可以检查 e.key 是否是字符串(如 Control、Alt、CapsLock 等)或字符(如 a、b、c 等)。 char,然后将其转换。

\n\n

所有这些都会让您知道按下了哪个键以及该键的本机可打印字符是什么。我没有德语、意大利语或其他键盘可供测试,但你明白了。

\n\n

哦,如果您担心Shift+是否3会产生“\xc2\xa7”或“#”,那么您应该始终将该组合表示为 Shift+3,无论它产生什么字符,更不用说通过组合产生相同的结果Ctrl+ Shift+3。您只需担心字母字符,但我相信我已经为您提供了检查的方法。

\n\n

另外,我相信您甚至可能不需要e.whiche.keyCode,因为e.key应该为您提供一切。

\n