JS捕获的AZERTY键盘事件分析

628#bebfe052

对比一下常用的QWERTY类型的键盘和AZERTY键盘,在进行前端开发中,目前没有完美的方式去兼容他们。

问题描述

市面上使用的大都是 QWERTY 类型的键盘,而 AZERTY 键盘从输入上没有什么差别,就从类型名称上看,就能猜出,两种键盘的差别就是:Q 与 A 键位替换,W 和 Z 键位替换。

身边也没有AZERTY键盘

它的表现就是,按键 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状态时,捕获的事件中的keykeyCode都是正常的,而keyCode已经被弃用,所以主动判断一下这四个按键的事件,keycode错位时,替换即可。

参考

参与本文讨论

请先登录 GitHub 后留言

0/500

本文留言

0

这篇文章还没有留言,来写第一条吧。

1 / 1