Asinkronishtësia e ngarkimit të imazheve në JavaScript

Imazhet që krijohen në mënyrë dinamike përmes JavaScript, gjithashtu ngarkohen në mënyrë asinkrone. Le të shqyrtojmë kodin e mëposhtëm si shembull:

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

Siç e shihni, këtu ne krijojmë një tag img, shkruajmë në src të tij rrugën për tek imazhi dhe e vendosim këtë imazh në body. Megjithatë, imazhi nuk do të shfaqet menjëherë në faqe. Çështja është se kur ne shkruajmë në src rrugën për tek imazhi - shfletuesi fillon ta shkarkojë këtë imazh nga faqja e internetit. Vetëm pasi të jetë shkarkuar imazhi, atëherë shfletuesi do të jetë në gjendje ta shfaqë atë.

Nëse imazhi është mjaft i madh, dhe shpejtësia e internetit është mjaft e ulët, atëherë përdoruesi i faqes për një kohë do të mund të "admirojë" një imazh bosh - derisa të ngarkohet.

Në fakt, tag-u img ka ngjarjen load, e cila aktivizohet në përfundim të ngarkimit të imazhit:

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

image.addEventListener('load', function() {
  // do të aktivizohet pas ngarkimit të imazhit
});

Ne mund ta përdorim këtë, për të vendosur imazhin në faqe, vetëm kur ky imazh të jetë ngarkuar:

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

image.addEventListener('load', function() {
  document.body.appendChild(image); // vendosim pas ngarkimit
});

Imazhi nuk do të ngarkohet domosdoshmërisht: mund të ndodhë që rruga për tek imazhi të jetë e gabuar, ose të ndodhë një ndërprerje e internetit, dëmtim i serverit me faqen ose diçka e ngjashme. Me fjalë të tjera - situatë e jashtëzakonshme. Në këtë rast, nuk do të aktivizohet ngjarja load, por ngjarja error:

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

image.addEventListener('load', function() {
  document.body.appendChild(image);
});
image.addEventListener('error', function() {
  // gabim në ngarkimin e imazhit
});
Задание 1

Bëni një buton, duke klikuar mbi të cilin do të ngarkohet një imazh. Shfaqni imazhin, kur ai të jetë ngarkuar. Shfaqni një mesazh në rast problemesh me ngarkimin e imazhit.