使用 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 是否按下了左键或右键。

注意:我没有检查键码,但我认为它们对应于您想要的键。