Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

177
Views
clearInterval no funciona en keydown addEventListener dentro de setInterval en javascript

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) } })
about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

¿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.

about 4 years ago · Juan Pablo Isaza Report

0

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); } });

about 4 years ago · Juan Pablo Isaza Report

0

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) } })
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!