Просмотр полной версии : идентификация одновременного нажатия 2-х и более клавиш
При создании игры на JS столкнулся с невозможностью определить коды нескольких нажатых клавиш (идентифицируется только нажатие последней клавиши). Возможно ли это исправить,
Rootpassword
17.03.2012, 23:49
Чисто через события-нет. У нас в Event есть код одной нажатой клавиши, + нажатие системных клавиш ctrl alt.. с этой клавишей, одно нажатие-одно событие, все последовательно и однопоточно. Можно попробовать заносить код клавиши в "хэш", что клавиша нажата keydown или keypressed, и удалять ее при событии keyup. Теоретически, пока вы держите клавишу нажатой, будут идти keypressed, т.е. что-то вроде
keydown keypressed keypressed keypressed keypressed keypressed keyup
Раед, если я правильно понял вопрос [q + w (скан коды)]
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<script>
function runOnKeys( func, args ) {
var keys = [];
args.sort( function( a, b ) { return a - b; } );
document.onkeyup = function( e ) {
e = e || window.event;
keys.push( e.keyCode );
if ( keys.length === args.length ) {
keys.sort( function( a, b ) { return a - b; } );
if ( keys.join() === args.join() ) func();
keys = [];
}
};
document.onkeydown = function() {
keys = [];
};
}
runOnKeys(
function() { alert( 'Hi' ) },
[
"Q".charCodeAt( 0 ),
"W".charCodeAt( 0 )
]
);
</script>
</body>
</html>
Раед, если я правильно понял вопрос [q + w (скан коды)]
Спасибо, но поняли вы не совсем правильно. Мне не нужно выполнять ф-ию при нажатии 2-х клавиш одновременно. У меня на разные клавиши стоят разные функции. Например, нажата "r". Обработчик onkeydown запускает определённую функцию, пока "r" не отпустят. Затем, не отпуская "r" юзер нажимает "a". Здесь ф-ия, поставленная на "r" перестаёт выполняться и начинает запускаться ф-ия, поставленная на "a", а нужно, чтобы функции 'r' и "a" запускались по очереди.
Rootpassword, Спасибо за идею, попробую реализовать.
vBulletin® v3.6.7, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot