Асинхроно учитавање слика у JavaScript-у

Слике које се динамички креирају преко JavaScript-а, такође се учитавају асинхроно. Размотримо на пример следећи код:

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

Као што видите, овде креирамо таг img, уписујемо у његов src пут до слике и смештамо ову слику у body. Слика, међутим, неће се одмах појавити на страни. Ствар је у томе да када смо уписали у src пут до слике - прегледач почиње да преузима ту слику са сајта. Чим се слика преузме, тек тада прегледач може да је прикаже.

Ако је слика довољно велика, а брзина интернета довољно мала, тада корисник сајта неко време може да се "надиви" прасној слици - док се не учита.

Заправо, таг img има догађај load, који се активира при завршетку учитавања слике:

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

image.addEventListener('load', function() {
  // активира се по учитавању слике
});

Ово можемо искористити да сместимо слику на страну, само када се та слика учита:

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

image.addEventListener('load', function() {
  document.body.appendChild(image); // смештамо по учитавању
});

Слика не мора нужно да се учита: може да се деси да је пут до слике погрешен, или дође до прекида интернета, квара сервера са сајтом или нешто слично. Другим речима - изузетна ситуација. У том случају се неће активирати догађај load, већ догађај error:

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

image.addEventListener('load', function() {
  document.body.appendChild(image);
});
image.addEventListener('error', function() {
  // грешка при учитавању слике
});
Задание 1

Направите дугме, при клику на које ће се учитати слика. Прикажите слику када се учита. Прикажите поруку у случају проблема са учитавањем слике.