如何弄清ALT + CTRL和ALTGR键?
我在这里找到了以下代码作为可能的解决方案,但这是行不通的:
if (event.ctrlKey && event.altKey) {
}
此代码对alt + ctr和altGr均适用。
我有这样的情况:对于alt + ctrl + e(例如,e,没关系),我想要一件事,而对于altGr + e,我想要另一件事,我该怎么做?
如果有人有什么想法,请告诉我。
最佳答案
您可以通过location
对象中event
属性的值来检测(从右键或左键)按下了哪个键。如果location属性的值为1(e.location=1
),则按左键。如果值是2,则按右键。
在这里,我提供了的代码RightAlter+RightCtrl+<any_valid_key>
检查这个例子
var isRightAltKey=false;
var isRightCtrlKey=false;
var validKeys=['a','s','d','f','g']; //keep empty array if no need to check key
document.addEventListener("keydown", function(e) {
if(e.key=="Alt"){
// when right Alter pressed make isRightAltKey true
isRightAltKey= (e.location==2);
}
else if(e.key=="Control"){
// when right Control pressed make isRightCtrlKey true,
//if you need any ctrl key pressed then simply set isRightCtrlKey= true;
isRightCtrlKey= (e.location==2);
}
// checking both right key is pressed already or not?
var isRightKeys= isRightAltKey && isRightCtrlKey;
// validate other keys [optional]
var isValidKey=((typeof validKeys === "undefined") || validKeys.length==0 || validKeys.indexOf(e.key.toLowerCase())>=0);
if (isRightKeys && isValidKey){
document.getElementById("detect_key").innerHTML = "RightAlt + RightCtrl + "+e.key;
}
else
{
document.getElementById("detect_key").innerHTML="";
}
}, false);
document.addEventListener("keyup", function(e) {
if(e.key=="Alt"){
// when right Alter released make isRightAltKey false
isRightAltKey= false;
}
else if(e.key=="Control"){
// when right Control released make isRightCtrlKey false
isRightCtrlKey= false;
}
}, false);
<div id="detect_key"></div>
为什么要附加按键事件列表器?
在这里,我们必须在按下Ctrl和Alt键(发生keydown事件)时检测键的位置。并且我们必须将其存储在flag变量中并使其正确。释放键时(发生keyup事件时)必须标记为false。否则,这些标志将始终保持为真。在下一个按键上,它将始终为真