Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   идентификация одновременного нажатия 2-х и более клавиш (https://javascript.ru/forum/events/26678-identifikaciya-odnovremennogo-nazhatiya-2-kh-i-bolee-klavish.html)

Раед 17.03.2012 20:56

идентификация одновременного нажатия 2-х и более клавиш
 
При создании игры на JS столкнулся с невозможностью определить коды нескольких нажатых клавиш (идентифицируется только нажатие последней клавиши). Возможно ли это исправить,

Rootpassword 17.03.2012 21:49

Чисто через события-нет. У нас в Event есть код одной нажатой клавиши, + нажатие системных клавиш ctrl alt.. с этой клавишей, одно нажатие-одно событие, все последовательно и однопоточно. Можно попробовать заносить код клавиши в "хэш", что клавиша нажата keydown или keypressed, и удалять ее при событии keyup. Теоретически, пока вы держите клавишу нажатой, будут идти keypressed, т.е. что-то вроде
keydown keypressed keypressed keypressed keypressed keypressed keyup

nerv_ 18.03.2012 07:45

Раед, если я правильно понял вопрос [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>

Раед 18.03.2012 11:37

Цитата:

Сообщение от nerv_
Раед, если я правильно понял вопрос [q + w (скан коды)]

Спасибо, но поняли вы не совсем правильно. Мне не нужно выполнять ф-ию при нажатии 2-х клавиш одновременно. У меня на разные клавиши стоят разные функции. Например, нажата "r". Обработчик onkeydown запускает определённую функцию, пока "r" не отпустят. Затем, не отпуская "r" юзер нажимает "a". Здесь ф-ия, поставленная на "r" перестаёт выполняться и начинает запускаться ф-ия, поставленная на "a", а нужно, чтобы функции 'r' и "a" запускались по очереди.

Rootpassword, Спасибо за идею, попробую реализовать.


Часовой пояс GMT +3, время: 21:53.