Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Прошу помощи по выполнению функции по нажатию 2х клавиш. (https://javascript.ru/forum/misc/28927-proshu-pomoshhi-po-vypolneniyu-funkcii-po-nazhatiyu-2kh-klavish.html)

drenadan 07.06.2012 14:44

Прошу помощи по выполнению функции по нажатию 2х клавиш.
 
Добрый день.

я только начал разбираться с JavaSkript.

подскажите пожалуйста, или ткните носом в ссылку где читать - как реализовать задачу:

Есть управление стрелками.
Есть функция выполняющее определенное действие на клавишах "стрелка вверх" "стрелка вниз" "стрелка вправо" "стрелка влево".

Для примерного представления - есть машинка которой управляет плата, плата берет выборку из БД и выполняет функцию которая соответствует считанной строке.. (то есть вперед, вправо ,влево, назад)

Возможно ли сделать на javascript так что б при нажатии на UP выполнялась одна функция, потом мы не отпуская UP нажимаем left (для поворота, как в гонках на компьютере то есть получается уже в придачу к UP дожимается Left) - выполнялась другая функция .... left отпустили (то есть едим дальше прямо) но UP при этом не уходил в (onkeyup) и функция продолжала выполнятся для UP ?

Буду рад любым советам.

Спасибо.

oneguy 07.06.2012 16:55

У меня не много опыта по использованию клавишных событий, но кое-что скажу.
Нужно повесить свои обработчики на события keydown и keyup.
Вот статья в учебнике: http://learn.javascript.ru/keyboard-events
Вот спецификация W3C для справки (на английском языке): http://www.w3.org/TR/DOM-Level-3-Eve...keyboardevents
Вот мой простой пример:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />
<title></title>
</head>
<body style="width:500px; height:500px; border:solid 5px">
<div id="square" style="background-color:red; position:relative; width:16px; height:16px"/>
<script type="text/javascript">
var x=0, y=0, keys=[false, false, false, false];
var square=document.getElementById("square");
document.body.addEventListener("keydown", function(event){
  var key=event.keyCode;
  if (key>=37&&key<=40)
    keys[key-37]=true;
});
document.body.addEventListener("keyup", function(event){
  var key=event.keyCode;
  if (key>=37&&key<=40)
    keys[key-37]=false;
});
setInterval(function(){
  x+=3*(keys[2]-keys[0]);
  y+=3*(keys[3]-keys[1]);
  if (x<0)
    x=0;
  else if (x>484)
    x=484;
  if (y<0)
    y=0;
  else if (y>484)
    y=484;
  square.style.left=x+"px";
  square.style.top=y+"px";
}, 100);
</script>
</body>
</html>

хотя я не уверен в его оптимальности.
Здесь использовалось свойство keyCode объекта KeyboardEvent, хотя оно является устаревшим, а новое свойство key ещё не поддерживаестя многими браузерами.


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