Este código funcionará bien cuando presione la tecla Flecha derecha una vez a la vez. Pero cuando presiona ArrowKey dos veces o muchas a la vez, el intervalo se ejecuta con infinito, clearInterval y si la condición no funciona. por favor ayuda. Debe ejecutar este código en su PC. entonces entenderás lo que quiero decir.
var increaseNum; function endLevel() { window.clearInterval(increaseNum); } var n=0; window.addEventListener("keydown", (e)=>{ if(e.key == "ArrowRight"){ increaseNum = setInterval(()=>{ n +=1; if(n>10){ endLevel(); } console.log(n); }, 50) } })¿No puedes hacer esto?
window.addEventListener("keydown", (e) => { if (e.key == "ArrowRight") { function endLevel() { window.clearInterval(increaseNum); } var increaseNum; var n = 0; increaseNum = setInterval(() => { n +=1; if(n>10){ endLevel(); } console.log(n); }, 50) } }) Porque como lo tiene ahora, cuando presiona varias veces, se reasigna el increaseNum de Num, por lo tanto, clearInterval no funcionará como espera. También todos esos intervalos serán crecientes en el mismo n .
En el ejemplo anterior, ahora se dispararán múltiples intervalos, cada uno cerrándose sobre su propia versión de n , endLevel increaseNum Aunque no estoy seguro de si eso es lo que quieres.
O puede que le resulte más adecuado no iniciar un nuevo intervalo si ya hay otro en ejecución. O puede borrar el intervalo existente (como en la otra respuesta). Depende de su caso de uso.
solo puede verificar si ya hay un conteo en progreso y si hay uno, no inicie otro, algo como esto:
var increaseNum; function endLevel() { window.clearInterval(increaseNum); increaseNum = null; n = 0; } var n = 0; window.addEventListener("keydown", (e) => { if (increaseNum) return; if (e.key == "ArrowRight") { increaseNum = setInterval(() => { n += 1; if (n > 10) { endLevel(); } console.log(n); }, 50); } });Si entiendo lo que desea hacer mientras el usuario presiona la flecha derecha, entonces desea que el juego continúe, pero si se detiene, setInterval alcanzará n> 10 y se llamará al método endLevel.
let increaseNum; let n = 0; let reset = true; function endLevel() { n = 0; window.clearInterval(increaseNum); } window.addEventListener("keydown", (e)=>{ if(e.key == "ArrowRight"){ window.clearInterval(increaseNum); n = 0; increaseNum = setInterval(()=>{ if(n>10){ endLevel(); } n++; }, 50) } })