Как исправить это, если оператор - PullRequest
0 голосов
/ 16 июня 2020

У меня есть объект, который я хочу переместить по диагонали при нажатии двух клавиш. Пока он работает, но после отпускания двух клавиш, если я нажимаю только одну клавишу, а именно «s», он продолжает двигаться по диагонали. Как заставить объект двигаться ТОЛЬКО по диагонали при одновременном нажатии двух клавиш?

let keysPressed = ["d", "s"];
const box1 = document.getElementById("box1");
var box1x = box1.offsetLeft;
var box1y = box1.offsetHeight;

document.addEventListener('keydown', (event) => {
keysPressed[event.key] = true;
if (keysPressed['d'] && event.key == 's') {
   box1.style.left = document.getElementById("box1").offsetLeft + 5 + 'px';
   box1.style.top = document.getElementById("box1").offsetTop + 5 + 'px';
} 
});

Ответы [ 2 ]

1 голос
/ 16 июня 2020

Вам следует добавить обработку событий нажатия клавиш. Теперь значения keyPressed никогда не очищаются.

0 голосов
/ 16 июня 2020

После первого нажатия keysPressed все еще сохраняет значение true предыдущей клавиши. Итак, после этого условие keysPressed['d'] всегда true и это вызывает вашу текущую проблему.

Вы должны обновить его до false в конце функции обратного вызова.

keysPressed[event.key] = true;
// ....
keysPressed[event.key] = false;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...