有没有办法检测按下Alt键的哪一侧(右侧或左侧)?

时间:2011-12-19 14:08:34

标签: javascript javascript-events

有没有办法可以检测 Alt 键被按下哪一侧,即区分左或右 Alt ?我在某个地方看到IE可能具有altLeft对象的altRightEvent属性。如果这是正确的,我们如何在Firefox中使用JavaScript检测它?

这就是它在altLeft的IE中的工作原理:

window.onload = function(){
  document.getElementById('id').onkeydown = function(){
    alert(window.event.altLeft);
  }
}

3 个答案:

答案 0 :(得分:11)

2015回答

DOM3添加了location property of keyboard events(另请参阅MDN)(早期版本有keyLocation属性),它可以满足您的需求,并在所有主流浏览器的最新版本中实现。< / p>

演示:

document.getElementById("ta").addEventListener("keydown", function(e) {
  var keyLocation = ["Standard", "Left", "Right", "Numpad", "Mobile", "Joystick"][e.location];
  var message = "Key '" + (e.key || e.keyIdentifier || e.keyCode) + "' is down. Location: " + keyLocation;
  this.value += "\n" + message;
  e.preventDefault();
}, false);
<textarea id="ta" rows="10" cols="50">Click on here and press some modifier keys such as Shift</textarea>

2011回答

没有。通常,不可能以跨浏览器的方式区分左和右修改键。 shiftLeft的{​​{1}},shiftRightctrlLeftctrlRightaltLeftaltRight属性都只是IE,没有相应的存在于其他浏览器中。

DOM3添加了location property of keyboard events(早期版本有window.event属性)但Firefox没有实现此功能。

答案 1 :(得分:3)

好问题。事件对象不包含关于按下哪个alt的任何内容,但您可以尝试这样的事情:

var altLeft = false,
    altRight = false,
    time = null;

document.onkeydown = function (e) {
    e = e || window.event;
    //The time check is because firefox triggers alt Right + alt Left when you press alt Right so you must skip alt Left if it comes immediatelly after alt Right
    if (e.keyCode === 18 && (time === null || ((+new Date) - time) > 50)) {
        altLeft = true;
        time = null;
    } else if (e.keyCode === 17) {
        altRight = true;
        time = + new Date;
    }
}

document.onkeyup = function (e) {
    e = e || window.event;
    if (e.keyCode === 18) altLeft = false;
    else if (e.keyCode === 17) altRight = false;
}

document.onclick = function () {
    console.log("left", altLeft, "right", altRight);
}

在Firefox中它适用于我,无论如何17和18(这是alt Right和Left的关键代码)可以在不同的浏览器或操作系统上进行更改,因此您必须检查它们。

答案 2 :(得分:0)

<html>
    <head>
        <title></title>
        <script type="text/javascript">
        flag = 0;
        text = ['else', 'Ctrl', 'AltGr', 'Alt'];

        function key_down(e) {
            var aa = e.keyCode;
            if (aa == 18) {
                event.keyCode = 0;
                event.returnValue = false;
            }
            this_key(aa);
        }

        function this_key(fn1) {
            if (fn1 == 17) {
                flag = 1;
                timer = setTimeout('this_key(1)', 10);
                return;
            }
            if (fn1 == 18 && flag == 1) {
                clearTimeout(timer);
            }

            var aa = 0;

            if (fn1 == 1) {
                aa = 1;
            }
            if (fn1 == 18) {
                if (flag == 1) {
                    aa = 2;
                } else {
                    aa = 3;
                }
            }

            document.getElementById('result').innerHTML = text[aa];
            flag = 0;
        }
        </script>
    </head>

    <body onkeydown="key_down(event);">
        <div id="result" style="font-size: 5em;"></div>
    </body>

</html>

这是我的解决方案