需求如下:自定义一些快捷键指令,让用户更便捷的操作,例如Ctrl + 1,Ctrl + space等。如何兼容mac跟windows系统呢,因为使用两种系统的用户个人习惯不一样,windows用户是用ctrl键,按键码为17,而mac用户更倾向于使用command键来当做ctrl键,所以我们需要处理一下,首先,我们需要识别用户的系统。
function getPlatform() {
var isWin = (navigator.platform == "Win32") || (navigator.platform == "Windows");
if (isWin) return "Win";
var isMac = (navigator.platform == "Mac68K") || (navigator.platform == "MacPPC") || (navigator.platform == "Macintosh") || (navigator.platform == "MacIntel");
if (isMac) return "Mac";
}
这样我们通过函数的返回值可以识别用户的系统,然后就是根据不同的按键组合来具体区分一下。这里有一个需要注意的地方,有时候,我们可能会这样来判断组合快捷键:
function onkeydown(e){
if(e.keyCode == 17){
//判断按下ctrl键
if(e.key == '1'){
//当做用户按下组合键ctrl+1处理
}
}
}
但,其实这样是错误的,因为你每次只有一个按键事件,不可能同时满足。
正确方法如下:
function onkeydown(e){
if(e.ctrlKey){
//是否按下ctrl键
if(e.key == '1'){
//按下ctrl+1组合键
}
}
}
所以最后我们的代码应该是这样的:
if((platform === 'Win' && e.ctrlKey) || (platform === 'Mac' && e.metaKey)){
if('1' == e.key) {
//用户按下ctrl+1键
}
}
最后解释一下metaKey,如果是windows系统,metaKey代表的是windows键是否按下,如果是mac系统,代表的就是command是否按下。