Keylistener in Javascript

后端 未结 5 809
走了就别回头了
走了就别回头了 2020-12-02 23:22

I\'m looking for a KeyListener for a game I\'m developing in JavaScript. I have no idea how this would work in real code but it would be something like this:

相关标签:
5条回答
  • 2020-12-02 23:29

    Here's an update for modern browsers in 2019

    let playerSpriteX = 0;
    
    document.addEventListener('keyup', (e) => {
      if (e.code === "ArrowUp")        playerSpriteX += 10
      else if (e.code === "ArrowDown") playerSpriteX -= 10
    
      document.getElementById('test').innerHTML = 'playerSpriteX = ' + playerSpriteX;
    });
    Click on this window to focus it, and hit keys up and down
    <br><br><br>
    <div id="test">playerSpriteX = 0</div>


    Original answer from 2013

    window.onkeyup = function(e) {
       var key = e.keyCode ? e.keyCode : e.which;
    
       if (key == 38) {
           playerSpriteX += 10;
       }else if (key == 40) {
           playerSpriteX -= 10;
       }
    }
    

    FIDDLE

    0 讨论(0)
  • 2020-12-02 23:33

    A bit more readable comparing is done by casting event.key to upper case (I used onkeyup - needed the event to fire once upon each key tap):

    window.onkeyup = function(event) {
        let key = event.key.toUpperCase();
        if ( key == 'W' ) {
            // 'W' key is pressed
        } else if ( key == 'D' ) {
            // 'D' key is pressed
        }
    }
    

    Each key has it's own code, get it out by outputting value of "key" variable (eg for arrow up key it will be 'ARROWUP' - (casted to uppercase))

    0 讨论(0)
  • 2020-12-02 23:34

    Did you check the small Mousetrap library?

    Mousetrap is a simple library for handling keyboard shortcuts in JavaScript.

    0 讨论(0)
  • 2020-12-02 23:40

    The code is

    document.addEventListener('keydown', function(event){
        alert(event.keyCode);
    } );
    

    This return the ascii code of the key. If you need the key representation, use event.key (This will return 'a', 'o', 'Alt'...)

    0 讨论(0)
  • 2020-12-02 23:40

    JSFIDDLE DEMO

    If you don't want the event to be continuous (if you want the user to have to release the key each time), change onkeydown to onkeyup

    window.onkeydown = function (e) {
        var code = e.keyCode ? e.keyCode : e.which;
        if (code === 38) { //up key
            alert('up');
        } else if (code === 40) { //down key
            alert('down');
        }
    };
    
    0 讨论(0)
提交回复
热议问题