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

277
Views
El contador no muestra cada número, solo muestra el total final

¿Por qué el contador solo muestra el número final en lugar de ver cada número 1 por 1? ¿Qué se debe hacer para lograr esto?

 var counter = 100; function countdown() { while(counter < 1000) { counter++; console.log(counter); document.getElementById('cc').innerHTML = counter; } } countdown(); setInterval(countdown, 1000);
about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

Este problema ocurre porque la ejecución de Javascript y la representación de la página están ocurriendo en el mismo hilo de ejecución. Esto significa que mientras se ejecuta el código, el navegador no volverá a dibujar la página porque la ejecución de JavaScript bloquea la actualización del DOM como en su ejemplo.

Para resolver esto, puede usar setTimeout() que le permite especificar una función que se ejecutará una vez después de un número determinado de milisegundos. Ahora, habrá espacios entre la ejecución del código en los que el navegador tendrá la oportunidad de volver a dibujar la página. ahora, cuando en realidad pasas 0 como el argumento de retraso. programará la devolución de llamada para que se ejecute de forma asíncrona, después de la demora más breve posible, que estará disponible después de que el hilo de ejecución de JavaScript no esté ocupado (la función de devolución de llamada estará esperando en la cola de devolución de llamada para que el bucle de eventos la extraiga y se maneje después muy poco tiempo)

 function count() { var counter = 100; var max = 1000; function timeoutLoop() { document.getElementById('cc').innerHTML = counter; if (++counter < max){ setTimeout(timeoutLoop, 0); } } setTimeout(timeoutLoop, 0); } count();
 <div id="cc"> </div>

Más información sobre el event loop : https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop

Excelente artículo sobre la representación del navegador: https://developpaper.com/the-process-of-browser-rendering-web-pages/

about 4 years ago · Juan Pablo Isaza Report

0

Es porque estaba usando un ciclo while, en su lugar, use una declaración if para verificar si el contador ha llegado a 1000. Vea a continuación:

 var counter = 100; function countdown() { if(counter < 1000) { counter++; console.log(counter); document.getElementById('cc').innerHTML = counter; } } countdown(); setInterval(countdown, 1000);
 <div id="cc"></div>

about 4 years ago · Juan Pablo Isaza Report

0

No le estás dando tiempo al navegador para respirar

Además, ¿por qué tener un bucle cuando setInterval bucles?

Y quieres hacer la cuenta regresiva. supongo que no está activo. También queremos detener el conteo. Por último, podemos guardar un paréntesis.

 let counter = 10; // 10 to show it works let tId; const cc = document.getElementById('cc'); function countdown() { if (counter === 0) { cc.innerHTML = "DONE!"; clearInterval(tId); // stop return } // console.log(counter); cc.innerHTML = counter; counter--; } countdown(); tId = setInterval(countdown, 1000);
 <span id="cc"></span>

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!