Доброе утро, у меня проблемы с EventListener
. У меня есть событие нажатия клавиш, когда я проверяю, нажата ли одна или несколько клавиш.
Моя проблема: У меня есть три случая: (W + A) - (W + D) или W. После того, как я нажимаю W + A и отпускаю клавишу A, происходит событие keyup срабатывает. Таким образом, логически событие keydown останавливается, но чтобы снова запустить событие keydown, мне нужно отпустить W и снова нажать его. Даже если клавиша W еще не нажата после нажатия клавиши A, событие нажатия клавиши не начнется снова.
Мой вопрос: Есть ли способ запустить событие, настроив Событие keydown для true или . Существует ли способ, при котором событие keydown распознает нажатую клавишу, не нажимая ее снова.
Событие Keydown:
document.addEventListener("keydown", event => {
if (!keyStatus) { keyStatus = keyDown(event); }
if (Object.keys(keysDown).length < 2) {
keysDown = (keysDown || []);
} else { Object.keys(keysDown).forEach(k => delete keysDown[k]); }
keysDown[event.keyCode] = true;
switch (true) {
case keysDown[65] && keysDown[87]:
if (currentCode.includes(68) || (currentCode.length <= 1 && currentCode.includes(87))) { currentCode = [] }
if (currentCode.includes(65) && currentCode.includes(87)) {
break;
} else { currentCode.push(65, 87); }
multiStatus = true
break;
case keysDown[68] && keysDown[87]:
if (currentCode.includes(65) || (currentCode.length <= 1 && currentCode.includes(87))) { currentCode = [] }
if (currentCode.includes(68) && currentCode.includes(87)) {
break;
} else { currentCode.push(68, 87) }
multiStatus = true
break;
case keysDown[87] && !multiStatus:
if (currentCode.includes(65) || currentCode.includes(68)) { currentCode = [] }
if (currentCode.length <= 1 && currentCode.includes(87)) {
break;
} else { currentCode.push(87) }
break;
default:
multiStatus = false
break;
}
});
document.addEventListener("keyup", event => {
if (keyStatus) { keyStatus = keyUp(event); currentCode = []; multiStatus = false }
});
Надеюсь, кто-нибудь сможет мне помочь. Заранее спасибо