JS捕获的AZERTY键盘事件分析
问题描述
市面上使用的大都是 QWERTY 类型的键盘,而 AZERTY 键盘从输入上没有什么差别,就从类型名称上看,就能猜出,两种键盘的差别就是:Q 与 A 键位替换,W 和 Z 键位替换。
它的表现就是,按键 Q 输入 q,但是某些代码捕获事件不正常,比如:浏览器端捕获到的keydown
事件,e.key=q
,而e.code= KeyA
。
这类型的键盘作者发现是在法国这边(具体哪些地方在使用,没有做数据统计)。
处理问题
影响的只有这两处我们需要收集这里的信息来处理一下。感谢法国友人yassinrais提供的数据。
Keyboard : Francais (France) - AZERTY
key | event.code | event.key | event.keyCode |
---|---|---|---|
Q | KeyA | q | 81 |
A | KeyQ | a | 65 |
W | KeyZ | w | 87 |
Z | KeyW | z | 90 |
Keyboard : English (US) - QWERTY
key | event.code | event.key | event.keyCode |
---|---|---|---|
Q | KeyA | a | 65 |
A | KeyQ | q | 81 |
W | KeyZ | z | 90 |
Z | KeyW | w | 87 |
现在分别处理这两种特殊情况。这看起来US状态时,三个能辨别的值都被正确的反转了,我们没有办法提前获知用户使用的键盘类型,就无法主动辨别,只能放弃这种情况。
非US状态时,捕获的事件中的key
和keyCode
都是正常的,而keyCode
已经被弃用,所以主动判断一下这四个按键的事件,key
和code
错位时,替换即可。