Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

283
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda