如何弄清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。否则,这些标志将始终保持为真。在下一个按键上,它将始终为真

10-08 19:04