Ответ 1
клавиши со стрелками запускаются только onkeydown
, а не onkeypress
Коды клавиш:
- left = 37
- up = 38
- right = 39
- down = 40
Как определить, когда нажата одна из клавиш со стрелками? Я использовал это, чтобы узнать:
function checkKey(e) {
var event = window.event ? window.event : e;
console.log(event.keyCode)
}
Хотя он работал для каждого другого ключа, он не предназначался для клавиш со стрелками (возможно, потому, что браузер должен прокручивать эти клавиши по умолчанию).
клавиши со стрелками запускаются только onkeydown
, а не onkeypress
Коды клавиш:
На клавише вверх и вниз вызывать функцию. Есть разные коды для каждой клавиши.
document.onkeydown = checkKey;
function checkKey(e) {
e = e || window.event;
if (e.keyCode == '38') {
// up arrow
}
else if (e.keyCode == '40') {
// down arrow
}
else if (e.keyCode == '37') {
// left arrow
}
else if (e.keyCode == '39') {
// right arrow
}
}
Возможно, следующая формулировка:
document.onkeydown = function(e) {
switch (e.keyCode) {
case 37:
alert('left');
break;
case 38:
alert('up');
break;
case 39:
alert('right');
break;
case 40:
alert('down');
break;
}
};
Демо (спасибо пользователю Angus Grant): http://jsfiddle.net/angusgrant/E3tE6/
Это должно работать кросс-браузер. Оставьте комментарий, если есть браузер, где он не работает.
Есть другие способы получить key code (e.which, e.charCode и window.event вместо e), но они не должны быть необходимы. Вы можете попробовать большинство из них на http://www.asquare.net/javascript/tests/KeyCode.html. Обратите внимание, что код события .key не работает с onkeypress в Firefox, но он работает с onkeydown.
Более свежая и намного чище: используйте event.key
. Нет больше произвольных числовых кодов! Если вы путешествуете или знаете, что все ваши пользователи используют современные браузеры, используйте это!
node.addEventListener('keydown', function(event) {
const key = event.key; // "ArrowRight", "ArrowLeft", "ArrowUp", or "ArrowDown"
});
Подробная обработка:
switch (event.key) {
case "ArrowLeft":
// Left pressed
break;
case "ArrowRight":
// Right pressed
break;
case "ArrowUp":
// Up pressed
break;
case "ArrowDown":
// Down pressed
break;
}
Вы можете легко расширить это, чтобы проверить "w", "a", "s", "d"
или любой другой ключ
PS event.code
одинаковый для стрелок
Используйте keydown
, а не keypress
для непечатаемых клавиш, таких как клавиши со стрелками:
function checkKey(e) {
e = e || window.event;
alert(e.keyCode);
}
document.onkeydown = checkKey;
Лучшая ссылка на ключевое событие JavaScript, которую я нашел (например, избиение штанов от quirksmode): http://unixpapa.com/js/key.html
Современный ответ, так как keyCode теперь устарел в пользу key:
document.onkeydown = function (e) {
switch (e.key) {
case 'ArrowUp':
// up arrow
break;
case 'ArrowDown':
// down arrow
break;
case 'ArrowLeft':
// left arrow
break;
case 'ArrowRight':
// right arrow
}
};
function checkArrowKeys(e){
var arrs= ['left', 'up', 'right', 'down'],
key= window.event? event.keyCode: e.keyCode;
if(key && key>36 && key<41) alert(arrs[key-37]);
}
document.onkeydown= checkArrowKeys;
Вот пример реализации:
var targetElement = $0 || document.body;
function getArrowKeyDirection (keyCode) {
return {
37: 'left',
39: 'right',
38: 'up',
40: 'down'
}[keyCode];
}
function isArrowKey (keyCode) {
return !!getArrowKeyDirection(keyCode);
}
targetElement.addEventListener('keydown', function (event) {
var direction,
keyCode = event.keyCode;
if (isArrowKey(keyCode)) {
direction = getArrowKeyDirection(keyCode);
console.log(direction);
}
});
Вот как я это сделал:
var leftKey = 37, upKey = 38, rightKey = 39, downKey = 40;
var keystate;
document.addEventListener("keydown", function (e) {
keystate[e.keyCode] = true;
});
document.addEventListener("keyup", function (e) {
delete keystate[e.keyCode];
});
if (keystate[leftKey]) {
//code to be executed when left arrow key is pushed.
}
if (keystate[upKey]) {
//code to be executed when up arrow key is pushed.
}
if (keystate[rightKey]) {
//code to be executed when right arrow key is pushed.
}
if (keystate[downKey]) {
//code to be executed when down arrow key is pushed.
}
Я смог захватить их с помощью jQuery:
$(document).keypress(function (eventObject) {
alert(eventObject.keyCode);
});
Пример: http://jsfiddle.net/AjKjU/
Это рабочий код для chrome и firefox
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"></script>
<script type="text/javascript">
function leftArrowPressed() {
alert("leftArrowPressed" );
window.location = prevUrl
}
function rightArrowPressed() {
alert("rightArrowPressed" );
window.location = nextUrl
}
function topArrowPressed() {
alert("topArrowPressed" );
window.location = prevUrl
}
function downArrowPressed() {
alert("downArrowPressed" );
window.location = nextUrl
}
document.onkeydown = function(evt) {
var nextPage = $("#next_page_link")
var prevPage = $("#previous_page_link")
nextUrl = nextPage.attr("href")
prevUrl = prevPage.attr("href")
evt = evt || window.event;
switch (evt.keyCode) {
case 37:
leftArrowPressed(nextUrl);
break;
case 38:
topArrowPressed(nextUrl);
break;
case 39:
rightArrowPressed(prevUrl);
break;
case 40:
downArrowPressed(prevUrl);
break;
}
};
</script>
</head>
<body>
<p>
<a id="previous_page_link" href="http://www.latest-tutorial.com">Latest Tutorials</a>
<a id="next_page_link" href="http://www.zeeshanakhter.com">Zeeshan Akhter</a>
</p>
</body>
</html>
Я тоже искал этот ответ, пока не наткнулся на это сообщение.
Я нашел другое решение, чтобы узнать код ключа разных ключей, любезно предоставив свою проблему. Я просто хотел поделиться своим решением.
Просто используйте событие keyup/keydown, чтобы записать значение в консоли/оповещении, используя event.keyCode
. как -
console.log(event.keyCode)
// or
alert(event.keyCode)
- rupam
Чем короче.
function IsArrows (e) {
return (e.keyCode >= 37 && e.keyCode <= 40);
}
Re отвечает, что вам нужно keydown
not keypress
.
Предполагая, что вы хотите что-то перемещать во время нажатия клавиши, я обнаружил, что keydown
работает для всех браузеров, кроме Opera. Для Opera keydown
срабатывает только при первом нажатии. Для использования Opera:
document.onkeydown = checkKey;
document.onkeypress = checkKey;
function checkKey(e)
{ etc etc
Эта библиотека потрясает! https://craig.is/killing/mice
Mousetrap.bind('up up down down left right left right b a enter', function() {
highlight([21, 22, 23]);
});
Вам нужно немного быстро выполнить последовательность, чтобы выделить код на этой странице.
управлять кодами клавиш %=37
и &=38
... и только клавиши со стрелками влево = 37 вверх = 38
function IsArrows (e) {
return ( !evt.shiftKey && (e.keyCode >= 37 && e.keyCode <= 40));
}
Если вы хотите обнаруживать нажатия клавиш со стрелками, но не нуждаетесь в конкретном Javascript
function checkKey(e) {
if (e.keyCode !== 38 || e.keyCode !== 40 || e.keyCode !== 37 || e.keyCode !== 39){
// do something
};
}
Я считаю, что самый последний метод будет:
document.addEventListener("keydown", function(event) {
event.preventDefault();
const key = event.key; // "ArrowRight", "ArrowLeft", "ArrowUp", or "ArrowDown"
switch (key) { // change to event.key to key to use the above variable
case "ArrowLeft":
// Left pressed
<do something>
break;
case "ArrowRight":
// Right pressed
<do something>
break;
case "ArrowUp":
// Up pressed
<do something>
break;
case "ArrowDown":
// Down pressed
<do something>
break;
}
});