Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

157
Visualizações
Simulación de tirada de troquel JS con 6 imágenes de troquel

en Js, quiero intentar simular una tirada de dados mostrando imágenes de los dados 1 a 6, pero cuando trato de mostrarlas en un bucle for, solo muestra la imagen dado6. Intenté poner un bucle for anidado para ralentizar el bucle exterior, pero eso no funcionó. ¿La página necesita actualizarse después de cambiar el atributo "src"?

 const dieImage = function (num) { return "images/dice" + String(num).trim() + ".png"; }; function dieRoll(num) { for (let i = 1; i < 7; i++) { for (let z = 0; z < 44444; z++) {} // attempt to slow if (num === 1) { img1.setAttribute("src", dieImage(i)); } else { img2.setAttribute("src", dieImage(i)); } } }
about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Lo que te falta (más o menos) es que el navegador pinta la pantalla cuando el código JavaScript ha terminado de ejecutarse. Aunque esté configurando el atributo src en una imagen diferente en un bucle, el código JavaScript finaliza solo cuando finaliza el bucle. El navegador pinta solo una vez, es decir, la última imagen que configuró en el ciclo. Esta explicación puede ser demasiado simplificada, pero te da una idea.

La solución es volver desde el código JavaScript después de configurar el src y repetirlo después de un retraso adecuado, dando al usuario la oportunidad de sentir el cambio. setTimeout probablemente sea lo suficientemente bueno para su caso; en otros casos de uso en los que desea una animación realmente fluida, habría otras soluciones (por ejemplo requestAnimationFrame() ). Una implementación no probada para demostrar la intención:

 function dieRoll(selectedNum) { var counter = 8; // how many times to change the die function repeat() { if (counter === 1) { // on the last iteration, set the image representing the selected number img1.setAttribute("src", dieImage(selectedNum)); } else { // else decrement the counter, set a random image and repeat after a timeout counter--; img1.setAttribute("src", dieImage(Math.floor(6 * Math.random()) + 1)); setTimeout(repeat, 300); } } repeat(); }
about 4 years ago · Juan Pablo Isaza Relatório

0

Como se menciona en los comentarios, puede usar setTimeout . Puede introducir un retraso y darle al navegador la oportunidad de volver a dibujar usando setTimeout , promise y await , por ejemplo, así:

 const DELAY = 300; // 300ms async function dieRoll(num) { for (let i = 1; i < 7; i++) { if (num === 1) { img1.setAttribute("src", dieImage(i)); } else { img2.setAttribute("src", dieImage(i)); } await new Promise((resolve) => setTimeout(() => resolve(), DELAY)); } }

La ejecución del bucle se detendrá hasta que se resuelva la promesa, pero permitirá que el navegador continúe respondiendo y redibujando. Cuando la promesa se resuelve después de que se ejecuta la devolución de llamada de tiempo de espera después de los milisegundos DELAY dados, tendrá lugar la siguiente iteración del bucle.

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda