Tema
/
Interneto svetainių kliento dalies kūrimas JS

js/observers.js — IntersectionObserver

Kodo stulpelyje — js/observers.js. Dvi funkcijos, abi paremtos IntersectionObserver.

revealOnScroll(elements) — kortelės „išnyra" (fade in) slenkant. Kiekvienai kortelei stebim, ar ji pateko į matomą sritį; kai taip — pridedam CSS klasę revealed (animaciją daro style.css).

Trys detalės, kurios skiria mėgėjišką kodą nuo tvarkingo:

  • observer.unobserve(entry.target) po pasirodymo — būtina. Kortelė pasirodė vieną kartą ir daugiau nesikeis; jei nenustotum stebėti, observeris „žiūrėtų" ją amžinai ir be reikalo naudotų resursus.
  • prefers-reduced-motion — jei vartotojas sistemoje išjungęs animacijas (dėl pykinimo nuo judesio), iškart pridedam revealed be jokio „išnyrimo". Prieinamumas, ne pasirinkimas.
  • threshold ir rootMargin — kada tiksliai suveikti (kai matoma 10%, bet 40px prieš pasiekiant apačią).

onReachEnd(sentinel, onReach) parodo, kaip tuo pačiu observeriu daromas begalinis slinkimas: pastatai nematomą „sargybinį" elementą sąrašo gale, ir kai jis pasirodo, kvieti „krauti daugiau". Taip veikia kiekvienas modernus srautas.

Patikrink. Su tikromis nuotraukomis iš 4 pamokos:

1. Galerija rodo kortelių tinklelį (naujausia viršuje).
2. Slenkant žemyn kortelės sklandžiai „išnyra".
3. Nuotraukos toli apačioje atsisiunčia tik prisiartinus (loading="lazy").

Spąstai (amžinas stebėjimas). Pamiršk unobserve() — ir observeris toliau kviečiamas kiekvienai kortelei per kiekvieną slinkimą, nors jos jau seniai pasirodė. Puslapis lėtėja be aiškios priežasties. Taisyklė: kai stebėjimo tikslas pasiektas — unobserve(). (Tas pats principas kaip įvykių klausytojų valymas.)