0Pricing
React Academy · Lekcja

IntersectionObserver do efektów wyzwalanych przewijaniem

Używać IntersectionObserver wewnątrz useEffect do uruchamiania animacji, leniwego ładowania i nieskończonego przewijania

IntersectionObserver do efektów wyzwalanych przewijaniem to bezpłatna lekcja React Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej React Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs React Academy zawiera 4 lekcji w sumie.

Działanie IntersectionObserver

API IntersectionObserver efektywnie monitoruje, czy co najmniej jeden element pojawia się w obszarze widocznym przeglądarki lub go opuszcza, ewentualnie w obszarze widocznym określonego elementu nadrzędnego. W przeciwieństwie do procedur obsługi przewijania, które są wywoływane przy każdym przesunięciu o piksel, obserwator wywołuje procedurę obsługi dopiero po przekroczeniu przez element określonego progu, dzięki czemu efekty zależne od przewijania działają znacznie wydajniej.

Procedura obsługi obserwatora i wpis

Procedura obsługi otrzymuje tablicę obiektów IntersectionObserverEntry, po jednym dla każdego obserwowanego elementu. Każdy wpis ma wartość logiczną isIntersecting (ma wartość true, gdy element jest widoczny) oraz liczbę intersectionRatio z zakresu od 0 do 1, określającą ułamek aktualnie widocznego elementu. Na ich podstawie można określić stan widoczności.

Tworzenie obserwatora w useEffect

Obserwator należy utworzyć wewnątrz useEffect, a następnie wywołać observer.observe(ref.current), aby rozpocząć obserwowanie elementu. Ref musi być przypisany do śledzonego elementu DOM. Obserwator należy utworzyć po zamontowaniu komponentu, aby wartość ref.current była już ustawiona.

Sprzątanie: unobserve i disconnect

W funkcji sprzątającej useEffect należy wywołać observer.unobserve(element), aby przestać obserwować konkretny element, lub observer.disconnect(), aby zatrzymać wszystkie obserwacje. Pominięcie sprzątania powoduje, że obserwator działa po odmontowaniu komponentu, co może prowadzić do błędów lub wycieków pamięci.

Opcja threshold

Opcja threshold określa, kiedy wywoływana jest procedura obsługi. Wartość 0 powoduje jej wywołanie, gdy tylko widoczny stanie się dowolny piksel elementu. Wartość 1 powoduje jej wywołanie dopiero po uzyskaniu pełnej widoczności elementu. Można także przekazać tablicę, na przykład [0, 0.5, 1], aby otrzymywać wywołania przy wielu poziomach widoczności.

Opcja rootMargin

rootMargin rozszerza lub zmniejsza efektywny obszar przecięcia przy użyciu składni podobnej do składni CSS: '100px 0px' powoduje wywołanie 100 pikseli przed wejściem elementu do obszaru widocznego. Wartość '-100px' powoduje wywołanie dopiero wtedy, gdy element znajdzie się 100 pikseli wewnątrz obszaru widocznego. Jest to przydatne podczas wstępnego ładowania lub animowania elementu, zanim stanie się on w pełni widoczny.

Leniwe ładowanie obrazów

Aby leniwie ładować obrazy, początkowo należy ustawić atrybut data-src zamiast src. Gdy obserwator zostanie wywołany z wartością isIntersecting: true, należy skopiować data-src do src, aby uruchomić żądanie sieciowe. Następnie należy wywołać observer.unobserve(entry.target), ponieważ obraz trzeba załadować tylko raz.

Animacje uruchamiane podczas przewijania

W przypadku animacji pojawiania się należy dodać klasę CSS, gdy wartość isIntersecting zmieni się na true: element.classList.add('visible'). Przejście należy zdefiniować w CSS: .card { opacity: 0; transform: translateY(20px); transition: opacity 0.4s, transform 0.4s; } oraz .card.visible { opacity: 1; transform: none; }. Obserwator wydajnie wykrywa moment uruchomienia animacji.

Analityka: śledzenie wyświetlanych treści

IntersectionObserver doskonale nadaje się do śledzenia wyświetleń. Gdy element z atrybutem data-analytics-id znajdzie się w obszarze obserwacji przy progu 0.5, należy wysłać zdarzenie analityczne. Pozwala to znacznie dokładniej mierzyć, które sekcje treści użytkownicy rzeczywiście przeczytali, niż samo śledzenie procentu przewinięcia.

Obserwowanie wielu elementów

Pojedyncza instancja IntersectionObserver może obserwować wiele elementów — wystarczy wywołać observer.observe(element) dla każdego z nich. Wszystkie obserwowane elementy korzystają z tego samego callbacku i tych samych opcji. W callbacku należy użyć entry.target, aby ustalić, który element wywołał powiadomienie.

Tworzenie hooka useInView

Wielokrotnego użytku hook useInView zwraca wartość [ref, inView]. Należy przypisać ref do dowolnego elementu i odczytywać inView, aby sprawdzić, czy element jest obecnie widoczny. Hook przyjmuje obiekt options określający threshold i rootMargin. Ta abstrakcja pozwala deklaratywnie definiować efekty przewijania w dowolnym komponencie.

Próg IntersectionObserver

Co oznacza próg IntersectionObserver równy 0?

Podsumowanie lekcji: IntersectionObserver

IntersectionObserver wydajnie śledzi widoczność elementów za pomocą isIntersecting i intersectionRatio. Należy zawsze sprzątać po obserwacji za pomocą unobserve lub disconnect. Parametr threshold służy do określania momentu wywołania, a rootMargin — do rozszerzania obszaru wykrywania. Mechanizm ten można stosować do leniwego ładowania, animacji i śledzenia danych analitycznych.

Często zadawane pytania

Czy lekcja „IntersectionObserver do efektów wyzwalanych przewijaniem” jest bezpłatna?

Tak — pełny tekst „IntersectionObserver do efektów wyzwalanych przewijaniem” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu React Academy, przejdź na CoddyKit PRO. Kurs React Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „IntersectionObserver do efektów wyzwalanych przewijaniem”?

Używać IntersectionObserver wewnątrz useEffect do uruchamiania animacji, leniwego ładowania i nieskończonego przewijania Ćwiczysz React Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć React Academy?

Nie wymagamy żadnego doświadczenia. React Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „IntersectionObserver do efektów wyzwalanych przewijaniem”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji React Academy?

Tak. Każda lekcja React Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Clipboard API: kopiowanie i wklejanie w React
  2. Geolocation API w komponentach React
  3. Notifications API i obsługa uprawnień
  4. IntersectionObserver do efektów wyzwalanych przewijaniem
← Powrót do React Academy