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

109
Vistas
Dom no se actualiza de inmediato cuando se usa convertToBlob en un lienzo fuera de pantalla

Tengo una aplicación que necesita generar un par de miles de imágenes. La forma en que lo hago es con un conjunto de png precargados (que actúan como capas transparentes) y un lienzo fuera de la pantalla. Dibujo las imágenes en el lienzo, las convierto en un blob y luego escribo la imagen en un div usando una clase personalizada llamada Imágenes.

Primero quiero mostrar una barra de carga y borrar las imágenes antiguas, pero hay un retraso de 3 a 5 segundos antes de que se actualice el dom, aunque el código "vacío()" y "mostrar()" se encuentra al comienzo de la solicitud de clic. .

¿Hay algo que esté haciendo mal con respecto a la asincronía o las promesas que hacen que el dom no se actualice de inmediato?

Aquí hay algo del código:

 // Generate Images $("#generate_images").click(function(){ // Show loading bar $("#progress_bar .progress-bar").css("width", "0%"); $("#progress_bar").show(0); // Show loading spinner $("#loading").show(0); $("#images").empty(); console.log("Generating Images"); $.each(images, function(id, image){ // Sort traits (png layers) var traits = Object.values(image.traits).sort((a, b) => { return a.z_index - b.z_index; }); images[id].layers = []; $.each(traits, function(trait_idx, trait){ images[id].layers.push(preloaded_images[trait.variant_id]) }); }); // Create canvas var canvas = new OffscreenCanvas(1200, 1200); var context = canvas.getContext("2d"); console.log("Generating canvases."); $.each(images, function(id, image){ // Clear the canvas context.clearRect(0, 0, canvas.width, canvas.height); // Draw each image layer $.each(images.layers, function(src, layer){ context.drawImage(layer, 0, 0); }); // Add imageData to screen canvas.convertToBlob().then(function(blob) { // Do something with the blob like render to the screen }); }); });

Cualquier idea sobre cómo hacer esto más eficiente también sería apreciada.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Generar mil imágenes no es algo que necesariamente deba hacer un navegador, pero debe darle al DOM la oportunidad de actualizarse, así que agregue un tiempo de espera

  1. Recoge lo que quieres hacer en una matriz
  2. No repita, sino que haga

 function generate() { if (arrayCounter >= array.length) return canvas.convertToBlob().then(function(blob) { if (success) { arrayCounter++ generate() } } } collect() generate()
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