⊗jsSpAsnIL 153 of 294 menu

Încărcarea asincronă a imaginilor în JavaScript

Imaginile care sunt create dinamic prin JavaScript sunt de asemenea încărcate asincron. Să luăm în considerare următorul cod ca exemplu:

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

După cum vedeți, aici creăm un tag img, scriem în src-ul său calea către imagine și plasăm această imagine în body. Imaginea, totuși, nu va apărea imediat pe pagină. Faptul este că atunci când am scris în src calea către imagine - browserul începe să descarce această imagine de pe site. Abia când imaginea va fi descărcată, abia atunci browserul o va putea afisa.

Dacă imaginea este suficient de mare, iar viteza internetului este suficient de mică, atunci utilizatorul site-ului pentru un timp se va putea "bucura" de o imagine goală - până când aceasta se va încărca.

De fapt, tag-ul img are un eveniment load care se declanșează la finalizarea încărcării imaginii:

let image = document.createElement('img'); image.src = 'img.png'; image.addEventListener('load', function() { // se va executa la încărcarea imaginii });

Putem folosi acest lucru pentru a plasa imaginea pe pagină, doar atunci când această imagine va fi încărcată:

let image = document.createElement('img'); image.src = 'img.png'; image.addEventListener('load', function() { document.body.appendChild(image); // plasăm după încărcare });

Imaginea nu se va încărca neapărat: este posibil ca calea către imagine să fie incorectă, sau să apară o întrerupere a internetului, o defecțiune a serverului site-ului sau ceva similar. Altfel spus - situație excepțională. În acest caz, nu se va declanșa evenimentul load, ci evenimentul error:

let image = document.createElement('img'); image.src = 'img.png'; image.addEventListener('load', function() { document.body.appendChild(image); }); image.addEventListener('error', function() { // eroare la încărcarea imaginii });

Creați un buton, la apăsarea căruia va fi încărcată o imagine. Afișați imaginea atunci când aceasta va fi încărcată. Afișați un mesaj în caz de probleme cu încărcarea imaginii.

uzlesnlpthy