Как отключить прослушиватель событий, который я звонил? - PullRequest
0 голосов
/ 26 октября 2019

Я назначаю прослушиватель событий внутри первой функции всякий раз, когда я нажимаю 1 на моей клавиатуре, который равен 49 в keyCode, это вызовет первую функцию, которая будет поддерживать А и S, когда вы пытаетесь ее нажать. затем, если я нажму на клавиатуре цифру 2, которая равна 50 в коде клавиши, то будет активирована вторая функция, которая будет поддерживать клавиши D и F при каждом нажатии. Моя проблема в том, что после того, как я вызвал первую функцию, а затем вызвал вторую функцию, как я могу отключить первую функцию, которая предотвратит нажатие клавиш A и S? Короче говоря, как отключить прослушиватель событий функции, которую я вызывал всякий раз, когда буду вызывать новую функцию?

<body>

</body>
<script>
    document.body.addEventListener('keydown',function(e){
        if(e.keyCode == 49){
            document.body.addEventListener('keydown',function(e){
                switch(e.keyCode){
                    case 65:
                    console.log('you pressed A')
                    break;
                    case 83:
                    console.log('you pressed s')
                    break
                }
            })
        }else if(e.keyCode == 50){
            document.body.addEventListener('keydown',function(e){
                switch(e.keyCode){
                    case 68:
                    console.log('you pressed d')
                    break;
                    case 70:
                    console.log('you pressed f')
                    break
                }
            })
        }
    });
</script>

1 Ответ

0 голосов
/ 26 октября 2019

Чтобы удалить прослушиватель событий, функция должна иметь имя для ссылки, чтобы вы могли ссылаться на прослушиватель событий, который нужно удалить. Например:

function myFunction() {
  // code here
}
document.body.addEventListener("keydown", myFunction);

и для его удаления:

document.body.removeEventListener("keydown", myFunction);

Без назначения функций именам JavaScript не знает, какой прослушиватель событий удалить, поскольку вы можете связать несколько функцийк одному элементу.

Таким образом, чтобы изменить свой код, он должен быть:

document.body.addEventListener("keydown",function(e) {
  if (e.keyCode == 49) {
    document.body.addEventListener("keydown", verticalMoves);
  } else if (e.keyCode == 50) {
    document.body.addEventListener("keydown", horizontalMoves);
  }
}

function verticalMoves(e) {
  switch(e.keyCode) {
    case 65: console.log("you pressed A"); break;
    case 83: console.log("you pressed S"); break;
  }
  document.body.removeEventListener("keydown", verticalMoves);
}
function horizontalMoves(e) {
  switch(e.keyCode) {
    case 68: console.log("you pressed D"); break;
    case 70: console.log("you pressed F"); break;
  }
  document.body.removeEventListener("keydown", horizontalMoves);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...