⊗jsSpAsnIL 153 of 294 menu

Assincronicidade de carregamento de imagens em JavaScript

Imagens que são criadas dinamicamente via JavaScript também são carregadas de forma assíncrona. Vamos considerar o seguinte código como exemplo:

let image = document.createElement('img'); image.src = 'img.png'; document.body.appendChild(image);

Como você pode ver, aqui nós criamos uma tag img, atribuímos ao seu src o caminho para a imagem e a colocamos no body. A imagem, no entanto, não aparecerá na página imediatamente. O fato é que quando atribuímos ao src o caminho para a imagem - o navegador inicia o download dessa imagem do site. Somente quando a imagem for baixada é que o navegador poderá exibi-la.

Se a imagem for suficientemente grande, e a velocidade da internet for suficientemente baixa, o usuário do site poderá "apreciar" por algum tempo uma imagem vazia - até que ela seja carregada.

Na verdade, a tag img possui um evento load, que é acionado quando o carregamento da imagem é concluído:

let image = document.createElement('img'); image.src = 'img.png'; image.addEventListener('load', function() { // será acionado quando a imagem carregar });

Podemos usar isso para colocar a imagem na página apenas quando ela estiver carregada:

let image = document.createElement('img'); image.src = 'img.png'; image.addEventListener('load', function() { document.body.appendChild(image); // colocamos quando carregar });

A imagem pode não carregar: pode acontecer do caminho para a imagem estar incorreto, ou ocorrer uma queda de internet, falha no servidor do site ou algo similar. Em outras palavras - uma situação excepcional. Nesse caso, não será o evento load que será acionado, mas sim o evento error:

let image = document.createElement('img'); image.src = 'img.png'; image.addEventListener('load', function() { document.body.appendChild(image); }); image.addEventListener('error', function() { // erro no carregamento da imagem });

Crie um botão que, ao ser clicado, carregue uma imagem. Mostre a imagem quando ela estiver carregada. Exiba uma mensagem em caso de problemas com o carregamento da imagem.

hyhuplswka