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 pridedamrevealedbe jokio „išnyrimo". Prieinamumas, ne pasirinkimas.thresholdirrootMargin— 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.)