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

110
Views
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 answers
Answer question

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 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!