Me gustaría que un juego active eventos al presionar una tecla, pero cuando me alejo y vuelvo a la página del juego, el detector de eventos se activa dos veces. Encontré otro problema que sugiere que elimine el oyente antes de agregarlo, pero eso no está ayudando.
El oyente se agrega durante el mounted
mounted() { this.setupInputListener(); },Y el detector de eventos keydown se agrega al documento
keydownListener() { const action = handleKeyDown(event.key); if ( action ) { this.SEND_INPUT({ gameId: this.gameId, action: action }); } }, setupInputListener() { document.removeEventListener('keydown', this.keydownListener); document.addEventListener('keydown', this.keydownListener); }¿Cómo puedo evitar que este detector de teclas emita eventos duplicados?
No puede agregar un detector de eventos varias veces, eso hará que se active una o varias veces. Para evitar esto, intente usar onkeydown . Una vez que hacemos esto, ya no necesitamos removeEventListener . Por ejemplo, algo como esto debería funcionar:
keydownListener() { const action = handleKeyDown(event.key); if (action) { this.SEND_INPUT({ gameId: this.gameId, action: action }); } }, setupInputListener() { document.onkeydown = () => { this.keydownListener; } }¡Esperaba que esto ayudara!