Asynchrónne načítanie obrázkov v JavaScripte

Obrázky, ktoré sú dynamicky vytvorené prostredníctvom JavaScriptu, sa tiež načítavajú asynchrónne. Pozrime sa na nasledujúci kód ako príklad:

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

Ako vidíte, tu vytvárame tag img, zapíšeme do jeho src cestu k obrázku a umiestnime tento obrázok do body. Obrázok sa však na stránke neobjaví okamžite. Faktom je, že keď sme zapísali do src cestu k obrázku - prehliadač začne sťahovať tento obrázok z webu. Až keď bude obrázok stiahnutý, až vtedy ho prehliadač bude môcť zobraziť.

Ak je obrázok dostatočne veľký a rýchlosť internetu dostatočne malá, používateľ webstránky bude nejaký čas môcť "obdivovať" prázdny obrázok - kým sa nenačíta.

V skutočnosti tag img má udalosť load, ktorá sa spustí po ukončení načítania obrázka:

javascriptlet image = document.createElement('img');
image.src = 'img.png';

image.addEventListener('load', function() {
  // spustí sa po načítaní obrázka
});

Môžeme to použiť na to, aby sme umiestnili obrázok na stránku až vtedy, keď bude tento obrázok načítaný:

javascriptlet image = document.createElement('img');
image.src = 'img.png';

image.addEventListener('load', function() {
  document.body.appendChild(image); // umiestnime po načítaní
});

Obrázok sa nemusí nevyhnutne načítať: môže nastať situácia, že cesta k obrázku je nesprávna, alebo dôjde k prerušeniu internetu, poruche serveru webu alebo niečomu podobnému. Inými slovami - výnimková situácia. V tomto prípade sa nespustí udalosť load, ale udalosť error:

javascriptlet image = document.createElement('img');
image.src = 'img.png';

image.addEventListener('load', function() {
  document.body.appendChild(image);
});
image.addEventListener('error', function() {
  // chyba načítania obrázka
});
Задание 1

Vytvorte tlačidlo, po kliknutí na ktoré sa načíta obrázok. Zobrazte obrázok, keď bude načítaný. V prípade problémov s načítaním obrázka vypíšte správu.