Asinhrono nalaganje slik v JavaScript

Slike, ki so dinamično ustvarjene prek JavaScript, se prav tako naložijo asinhrono. Razmislimo na primeru naslednje kode:

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

Kot vidite, tukaj ustvarimo oznako img, zapišemo v njen src pot do slike in postavimo to sliko v body. Slika pa se na strani ne bo pojavila takoj. Bistvo je, da ko zapišemo v src pot do slike - brskalnik začne prenašati to sliko s spletnega mesta. Šele ko bo slika prenešena, jo bo brskalnik lahko prikazal.

Če je slika dovolj velika, hitrost interneta pa dovolj majhna, bo uporabnik spletnega mesta nekaj časa lahko "občudoval" prazno sliko - dokler se ne naloži.

Pravzaprav ima oznaka img dogodek load, ki se sproži ob koncu nalaganja slike:

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

image.addEventListener('load', function() {
  // se sproži ob nalaganju slike
});

To lahko uporabimo, da sliko postavimo na stran šele, ko bo ta slika naložena:

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

image.addEventListener('load', function() {
  document.body.appendChild(image); // postavimo ob nalaganju
});

Slika se ne naloži nujno: lahko se zgodi, da je pot do slike napačna, ali pa pride do prekinitve interneta, okvare strežnika s spletnim mestom ali kaj podobnega. Z drugimi besedami - izjemna situacija. V tem primeru se ne bo sprožil dogodek load, ampak dogodek error:

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

image.addEventListener('load', function() {
  document.body.appendChild(image);
});
image.addEventListener('error', function() {
  // napaka pri nalaganju slike
});
Задание 1

Naredite gumb, ob kliku na katerega se bo naložila slika. Prikažite sliko, ko bo naložena. Izpišite sporočilo v primeru težav z nalaganjem slike.