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

165
Visualizações
¿Importa realmente el orden de onload o addEventListener y establecer el src de una imagen?

Lo he sostenido como una "verdad absoluta" durante mucho tiempo que hacer:

 let img = new Image(); img.src = '... some url ...' img.onload = function() { console.log('onload') }

fue incorrecto , porque es posible que no se llame al controlador .onload . Lo mismo para adjuntar un controlador usando .addEventListener('load', function() ... ) después de configurar .src : es posible que no funcione. (vea esta respuesta de ejemplo que dice esto: "... Agregue un detector de eventos antes de asignar un valor al atributo src ...")


Contexto para esta pregunta: encontré un ejemplo de configuración de .src antes de llamar a .addEventListener en la popular biblioteca p5.js, específicamente aquí . Me gustaría arreglar esto y enviar un PR. Sin embargo, también me gustaría crear una prueba de unidad que falle con el código actual (configurando .src = antes de llamar a .addEventListener ) y pase con mi solución.

¡Sin embargo! ¡No he podido ver en qué circunstancias falla realmente la configuración de .src antes...!


Aquí hay un código para demostrar lo que quiero decir:

 (function f() { let i = new Image(); i.src = '//placekitten.com/10/10'; document.querySelector('body').appendChild(i); let out = 0; for(let i = 0; i < 1000000000; i++) { out *= i * 100 - out * 2; } // just to delay i.onload = function() { console.log('onload') } i.addEventListener('load', function() { console.log('load event') }); })();

El ciclo de iteración 1000000000 tarda unos segundos en completarse, ya que intento que el elemento Image se agregue al DOM y que la URL de la imagen se cargue lo suficientemente pronto como para que los .onload y .addEventListener fallen... ¡Pero funcionan!

Probé con una URL de datos muy corta en lugar de placekitten.com, con el mismo resultado. Intenté cargar placekitten.com y las imágenes de URL de datos antes de ejecutar mi código de prueba (para asegurarme de que esas imágenes se almacenan en caché), pero eso tampoco funciona.

La única forma en que puedo hacer que los .onload y .addEventListener no sean llamados es envolverlos en un setTimeout ...


¿El subproceso único de JavaScript invalida la "verdad" de que .src siempre debe configurarse después de configurar los detectores de eventos? ¿O es un cambio que ocurrió en los navegadores modernos, y solía ser cierto en los navegadores más antiguos que a veces fallaba la configuración de .src antes de adjuntar los oyentes? ¡Gracias!

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

El orden no importa. El evento de load siempre se activa de forma asíncrona (puesto en cola en el bucle de eventos por el algoritmo de carga ), después de que se haya completado la ejecución síncrona, y evaluará qué detectores de eventos están instalados y deben ejecutarse solo entonces.

Dada la respuesta que vinculó y especialmente el evento image.onload y el caché del navegador / devolución de llamada jQuery en la carga de la imagen (incluso cuando la imagen está en caché) , parece que los navegadores más antiguos podrían haber disparado el evento sincrónicamente (o no) si la imagen era cargado desde la memoria caché.

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