Есть ли способ определить, на какую сторону нажата клавиша Alt (справа или слева)?
Можно ли определить, с какой стороны была нажата клавиша Alt, т.е. провести различие между левым или правым Alt? Я где-то видел, что это возможно с IE с свойствами altLeft
и altRight
объекта Event
. Если это правильно, как мы можем обнаружить его в Firefox с JavaScript?
Вот как это работает в IE для altLeft
:
window.onload = function(){
document.getElementById('id').onkeydown = function(){
alert(window.event.altLeft);
}
}
Ответы
Ответ 1
2015 ответ
DOM3 добавил свойство location
событий клавиатуры (см. также MDN) (более ранние версии имели свойство keyLocation
), которое делает то, что вы хотите, и реализовано в последних версиях всех основных браузеров.
Демо:
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>
Ответ 2
Хороший вопрос. Объект события не содержит ничего, на которое нажата 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) могут меняться в разных браузерах или операционных системах, поэтому вы должны их проверить.
Ответ 3
<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>
Вот мое решение