2015-09-01 1 views
-2

Я хочу, чтобы двигаться вокруг коробки с помощью клавиш со стрелками, как это (упрощенный):Перемещение по диагонали от обнаружения при нажатии на кнопку - Javascript

if(Key Pressed = Left Arrow) { 
    move box to left 
} 
if(Key Pressed = Up Arrow) { 
    move box up 
} 
if(Key Pressed = Right Arrow) { 
    move box to right 
} 

Вот фактический код:

var left = parseInt(document.getElementById("swag").style.left); 
 
var topSwag = parseInt(document.getElementById("swag").style.top); 
 

 
window.addEventListener("keydown", steerAround, false); 
 

 
function steerAround(a) { 
 
    if (a.keyCode == "37") { 
 
     // left arrow key 
 
     left--; 
 
     document.getElementById("swag").style.left = left + "px"; 
 
     
 
    } 
 
    if (a.keyCode == "38") { 
 
     // up arrow key 
 
     topSwag--; 
 
     document.getElementById("swag").style.top = topSwag + "px"; 
 
    } 
 
    if (a.keyCode == "39") { 
 
     // right arrow key 
 
     left++; 
 
     document.getElementById("swag").style.left = left + "px"; 
 
    } 
 
}
<div id="swag" style="position:absolute; top:100px; left:100px; width:100px; height:100px; background-color:#99CCCC">

Это работает почти отлично, коробка движется! Тем не менее, он может двигаться только в одном направлении за раз! Не как слева, так и вверх, например. Как я могу это исправить?

+4

Код, который вы показали, не должен предотвращать несколько одновременных действий. Покажите остальную часть функции. – isherwood

+1

Единственное событие клавиатуры только расскажет вам об одном ключе, я уверен. – Pointy

+1

Используйте джойстик вместо клавиатуры! (Это напоминает мне о играх на семейном ПК AT clone) – dsh

ответ

3

Прессы для ключей происходят только по одному. Вы не можете получить событие нажатия клавиши для нескольких клавиш. Даже если вы нажмете две клавиши как можно ближе, одна будет обнаружена перед другой, и вы получите два отдельных события.

Чтобы обработать несколько ключей, вам нужно посмотреть события keydown и keyup и следить за тем, какие клавиши нажаты. Затем в заданный интервал вы перемещаете поле в соответствии с нажатыми клавишами.

+0

Спасибо. Как реализовать «keydown», вместо того, что теперь кажется «keypress» или чем-то подобным? – JakeTheSnake

+1

@JakeTheSnake: Фактически вы используете 'keydown', но в этот момент вы перемещаете только поле. Вы также должны поймать 'keyup' и отслеживать состояние« вверх »или« вниз »для каждого ключа. Вы можете использовать 'setInterval' для запуска кода с интервалом, который перемещает поле в соответствии с состоянием для ключей. – Guffa

+0

Я не уверен, как «keyup» поможет мне здесь. Будет ли это зависеть от проблемы, заключающейся в том, что вы можете обнаружить только один ключ за раз? Могу ли я сделать какие-то разные переменные, каждый из которых может определить, какие клавиши нажаты? Спасибо. – JakeTheSnake

Смежные вопросы