Alt键在Mac和Windows上监听行为不一致怎么办?
我在做快捷键功能时发现,用keydown监听Alt键(也就是Mac上的Option键)时,Windows下能正常触发,但在Mac上有时候根本收不到事件。我试过监听e.altKey,也试过直接判断e.key === 'Alt',但Mac上按Option键经常没反应,或者只在组合其他键时才触发。
是不是因为Mac系统把Option键当作修饰键处理了?有没有办法统一处理跨平台的Alt/Option键监听?下面是我现在的监听代码:
document.addEventListener('keydown', (e) => {
if (e.key === 'Alt') {
console.log('Alt pressed');
}
});
我后来发现要在Mac上可靠监听Option键,得用
e.keyCode而不是e.key,因为Mac系统对Option键的key值处理很奇怪。试试这个改进版:关键点:
1. 加上
e.keyCode === 18专门处理Mac的情况2. 一定要调用
preventDefault(),否则Mac会优先处理特殊字符输入3. 组合键监听时记得检查
e.altKey状态我当时被这个坑折磨了两天,最后发现是Mac系统把Option键的key值返回成了"æ"、"ß"这类特殊字符。后来加了个全局变量记录Option键状态才搞定完整的快捷键系统。