使用 keydown 和 keyup 事件沿对角线移动对象,Javascript
Move object diagonally with keydown and keyup events, Javascript
嗨,我正在努力处理 keyup 和 keydown 事件,我的努力是让屏幕上的对象在同时按下键 "s" 和 "d" 或 "a" 和 "w" 等等。我读了很多关于这个的主题,但对我来说没有结论。
这是我目前得到的:
window.addEventListener("keydown", keysPressed, false);
window.addEventListener("keyup", keysReleased, false);
var keys = [];
function keysPressed(e) {
keys[e.keyCode] = true;
var oldLeft = getComputedStyle(document.body).left,
newLeft;
var oldTop = getComputedStyle(document.body).top,
newTop;
oldLeft = parseInt(oldLeft);
oldTop = parseInt(oldTop);
if (keys[65]) {
newLeft = oldLeft - 10;
}
else if (keys[68]) {
newLeft = oldLeft + 10;
}
else if (keys[87]) {
newTop = oldTop - 10;
}
else if (keys[83]) {
newTop = oldTop + 10;
}
document.body.style.left = newLeft + 'px';
document.body.style.top = newTop + 'px';
e.preventDefault();
}
function keysReleased(e) {
keys[e.keyCode] = false;
}
我知道那里有很多类似的问题,我也看到了很多,但仍然无法理解它是如何工作的。
您需要删除 else if (keys[87]) {
中的 else
,您当前的代码不会检查 up/down 是否按下了左键或右键。
注意:我没有检查键码,但我认为它们对应于您想要的键。
嗨,我正在努力处理 keyup 和 keydown 事件,我的努力是让屏幕上的对象在同时按下键 "s" 和 "d" 或 "a" 和 "w" 等等。我读了很多关于这个的主题,但对我来说没有结论。
这是我目前得到的:
window.addEventListener("keydown", keysPressed, false);
window.addEventListener("keyup", keysReleased, false);
var keys = [];
function keysPressed(e) {
keys[e.keyCode] = true;
var oldLeft = getComputedStyle(document.body).left,
newLeft;
var oldTop = getComputedStyle(document.body).top,
newTop;
oldLeft = parseInt(oldLeft);
oldTop = parseInt(oldTop);
if (keys[65]) {
newLeft = oldLeft - 10;
}
else if (keys[68]) {
newLeft = oldLeft + 10;
}
else if (keys[87]) {
newTop = oldTop - 10;
}
else if (keys[83]) {
newTop = oldTop + 10;
}
document.body.style.left = newLeft + 'px';
document.body.style.top = newTop + 'px';
e.preventDefault();
}
function keysReleased(e) {
keys[e.keyCode] = false;
}
我知道那里有很多类似的问题,我也看到了很多,但仍然无法理解它是如何工作的。
您需要删除 else if (keys[87]) {
中的 else
,您当前的代码不会检查 up/down 是否按下了左键或右键。
注意:我没有检查键码,但我认为它们对应于您想要的键。