简体   繁体   English

在vanilla Javascript中以编程方式触发keydown事件

[英]Triggering a keydown event programmatically in vanilla Javascript

I have an event attached to the window running on keydown . 我在keydown运行的窗口附加了一个事件。 I would like to test this by having a routine (per interval) programmatically hitting a key on the keyboard. 我想通过以编程方式命中键盘上的一个例程(每个时间间隔)来测试它。 The following code doesn't work - but works fine if I'm actually pressing a key on the keyboard. 以下代码不起作用 - 但如果我实际按下键盘上的某个键,则可以正常工作。

I originally tried: 我最初尝试过:

var evt = document.createEvent("KeyboardEvent"); 
setInterval(function() {
    evt.initKeyEvent("keydown", true, true, window, false, false, false, false, 13, 13);
}, 500);

Here's my current keydown event: 这是我目前的keydown事件:

window.addEventListener('keydown', function(k) {
    switch(k.keyCode) {
        case 38: //up
            if (Game.Area[Game.Player.x][Game.Player.y-1].type !== 0 && Game.Player.y > 0) {
                Game.Player.y--;
            }
            Game.Player.d = 0;
            break;
        case 40: //down
            if (Game.Area[Game.Player.x][Game.Player.y+1].type !== 0 && Game.Player.y < Game.Area[0].length-1) {
                Game.Player.y++;
            }
            Game.Player.d = 1;
            break;
        case 37: //left
            if (Game.Area[Game.Player.x-1][Game.Player.y].type !== 0 && Game.Player.x > 0) {
                Game.Player.x--;
            }
            Game.Player.d = 2;
            break;
        case 39: //right
            if (Game.Area[Game.Player.x+1][Game.Player.y].type !== 0 && Game.Player.y < Game.Area.length-1) {
                Game.Player.x++;
            }
            Game.Player.d = 3;
            break;
        case 66:
            if (Game.Player.d === 0 && Game.Player.y > 0) { //up
                Game.Area[Game.Player.x][Game.Player.y-1].type = 60;
            } else if (Game.Player.d === 1 && Game.Player.y < Game.Area.length) { //down
                Game.Area[Game.Player.x][Game.Player.y+1].type = 60;
            } else if (Game.Player.d === 2 && Game.Player.x > 0) { //left
                Game.Area[Game.Player.x-1][Game.Player.y].type = 60;
            } else if (Game.Player.d === 3 && Game.Player.x < Game.Area.length) { //right
                Game.Area[Game.Player.x+1][Game.Player.y].type = 60;
            }
            break;
        default:
            break;
    }
    Game.MoveZeds();

    for (var z = 0; z < Game.Zeds.length; z++) {
        if (Game.Player.x === Game.Zeds[z].x && Game.Player.y === Game.Zeds[z].y) {
            alert("Ouch!");
        }
    }
});

I believe 我相信

evt.initKeyEvent();

should actually be 应该是

evt.initKeyboardEvent();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM