Animacje sterowane gestami z use-gesture
Łączyć react-spring z @use-gesture/react, aby budować animacje sterowane przeciąganiem, szczypaniem i przewijaniem
Animacje sterowane gestami z use-gesture 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.
Omówienie @use-gesture/react
@use-gesture/react to biblioteka rozpoznawania gestów zaprojektowana do bezproblemowej współpracy z react-spring. Rozpoznaje gesty przeciągania, szczypania, przewijania, najechania kursorem, ruchu i kółka myszy, udostępniając znormalizowany stan gestu, który można bezpośrednio przekazywać do setterów sprężyny w celu tworzenia płynnych interakcji opartych na fizyce.
Stan gestu useDrag
Hook useDrag wywołuje callback przy każdym zdarzeniu przeciągania. Callback otrzymuje obiekt stanu gestu z najważniejszymi właściwościami: movement (łączne przesunięcie od rozpoczęcia przeciągania), velocity (bieżąca prędkość), direction (1 lub -1 dla każdej osi), first (ma wartość true na początku przeciągania), last (ma wartość true na końcu przeciągania) oraz event (surowe zdarzenie DOM).
Funkcja bind()
Wszystkie hooki use-gesture zwracają funkcję bind(). Wywołanie bind() zwraca obiekt właściwości obsługi zdarzeń (onPointerDown, onTouchStart itd.), które należy rozpropagować na elemencie, który ma stać się interaktywny. To punkt połączenia między mechanizmem rozpoznawania gestów a elementem DOM.
Łączenie useDrag z react-spring
Standardowy wzorzec polega na utworzeniu sprężyny za pomocą imperatywnego API ([springs, api] = useSpring(...)), a następnie użyciu useDrag do wywoływania api.start({ x: movement[0], y: movement[1] }) przy każdym zdarzeniu przeciągania. Sprężyna płynnie podąża za ruchem przeciągania, dodając naturalną fizykę do interakcji, która w przeciwnym razie sprowadzałaby się do sztywnego śledzenia kursora.
Powrót do pozycji początkowej po zwolnieniu
Po zakończeniu przeciągania (last: true w stanie gestu) zazwyczaj należy przywrócić element do pozycji początkowej. Należy wywołać api.start({ x: 0, y: 0 }) wewnątrz instrukcji if (last). react-spring animuje powrót z użyciem fizyki sprężyny — zapewnia delikatne odbicie zamiast natychmiastowego resetu, dzięki czemu interakcja daje satysfakcjonujące, fizyczne odczucie.
Wyrzucanie z użyciem prędkości
Wartość velocity w stanie gestu umożliwia implementację efektu wyrzucenia. Gdy użytkownik zwolni element z dużą prędkością, można wyrzucić go w kierunku przeciągania zamiast przywracać go do pozycji początkowej. Należy sprawdzić if (last && velocity[0] > threshold), a następnie animować element do jego końcowej pozycji poza ekranem. Jest to niezbędne w interakcjach zamykania przez przesunięcie.
Granice przeciągania i ograniczanie zakresu
Aby ograniczyć ruch przeciągania do obszaru kontenera, należy ograniczyć wartości przesunięcia przed przekazaniem ich do sprężyny: x: Math.max(-maxX, Math.min(maxX, movement[0])). Można też użyć wbudowanej w use-gesture opcji bounds: useDrag(handler, { bounds: { left: -100, right: 100 } }), aby automatycznie ograniczać stan gestu.
Wzorzec zamykania przez przesunięcie
Mobilna implementacja zamykania przez przesunięcie polega na użyciu useDrag do śledzenia ruchu poziomego. Jeśli użytkownik zwolni element z prędkością powyżej ustalonego progu LUB przesunie go o więcej niż połowę szerokości ekranu, należy animować kartę poza ekran (api.start({ x: window.innerWidth })), a następnie usunąć ją z listy. W przeciwnym razie należy przywrócić ją na środek.
usePinch do interakcji powiększania
usePinch rozpoznaje gesty szczypania dwoma palcami na ekranach dotykowych oraz Ctrl+wheel na komputerach. Stan gestu zawiera scale (bieżący poziom powiększenia względem początku szczypania) i origin (punkt centralny gestu szczypania). Połączenie go ze sprężyną śledzącą wartość scale pozwala tworzyć płynne, ograniczone interakcje powiększania obrazów lub map.
useHover i useMove
useHover wywołuje się, gdy wskaźnik wchodzi na element lub go opuszcza, udostępniając wartość logiczną active. useMove śledzi położenie myszy wewnątrz elementu, udostępniając znormalizowane współrzędne. Oba hooki są przydatne przy tworzeniu magnetycznych efektów najechania, w których elementy delikatnie przesuwają się w stronę kursora, gdy ten się zbliża.
Łączenie wielu gestów
Hooki use-gesture można ze sobą łączyć. Na tym samym elemencie można użyć useDrag i usePinch: const bindDrag = useDrag(...); const bindPinch = usePinch(...), a następnie rozpropagować obie funkcje bind: ...bindDrag() ...bindPinch(). use-gesture automatycznie rozstrzyga, z którym typem gestu ma do czynienia.
Przeznaczenie funkcji bind()
Co robi funkcja bind() zwracana przez hooki use-gesture?
Podsumowanie lekcji: integracja z use-gesture
@use-gesture/react udostępnia useDrag, usePinch, useScroll, useHover i useMove. Każdy hook zwraca funkcję bind(), której rozpropagowanie podłącza zdarzenia gestów do elementów DOM. Stan gestu udostępnia wartości movement, velocity, direction, first i last. Połączenie z imperatywną funkcją api.start() biblioteki react-spring pozwala tworzyć interaktywne animacje oparte na fizyce. Wartości velocity można użyć do wyrzucania elementów i zamykania przez przesunięcie, a bounds — do ograniczania ruchu.
Często zadawane pytania
Czy lekcja „Animacje sterowane gestami z use-gesture” jest bezpłatna?
Tak — pełny tekst „Animacje sterowane gestami z use-gesture” 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 „Animacje sterowane gestami z use-gesture”?
Łączyć react-spring z @use-gesture/react, aby budować animacje sterowane przeciąganiem, szczypaniem i przewijaniem Ć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 „Animacje sterowane gestami z use-gesture”?
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
- Podstawy React Spring: hook useSpring
- Animowane komponenty i interpolacja stylów
- useTrail i useChain do sekwencji
- Animacje sterowane gestami z use-gesture