Animazioni basate sui gesti con use-gesture
Combinare react-spring con @use-gesture/react per creare animazioni guidate da trascinamento, pinch e scorrimento
Animazioni basate sui gesti con use-gesture è una lezione React Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento React Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso React Academy include 4 lezioni in totale.
Panoramica di @use-gesture/react
@use-gesture/react è una libreria per il riconoscimento dei gesti progettata per funzionare senza problemi con react-spring. Riconosce i gesti di trascinamento, pizzicamento, scorrimento, passaggio del puntatore, movimento e rotellina, fornendo uno stato del gesto normalizzato che può essere passato direttamente ai setter delle spring per ottenere interazioni fluide basate sulla fisica.
Stato del gesto useDrag
L'hook useDrag esegue un callback a ogni evento di trascinamento. Il callback riceve un oggetto con lo stato del gesto e alcune proprietà principali: movement (spostamento totale dall'inizio del trascinamento), velocity (velocità corrente), direction (1 o -1 per ciascun asse), first (true all'inizio del trascinamento), last (true al termine del trascinamento) ed event (l'evento DOM grezzo).
La funzione bind()
Tutti gli hook di use-gesture restituiscono una funzione bind(). La chiamata a bind() restituisce un oggetto di proprietà per i gestori degli eventi (onPointerDown, onTouchStart e così via), che vengono distribuite sull'elemento che si desidera rendere interattivo. Questo è il punto di collegamento tra il riconoscitore dei gesti e l'elemento DOM.
Combinare useDrag con react-spring
Il modello standard consiste nel creare una spring con l'API imperativa ([springs, api] = useSpring(...)) e poi usare useDrag per chiamare api.start({ x: movement[0], y: movement[1] }) a ogni evento di trascinamento. La spring segue gradualmente il movimento di trascinamento, aggiungendo una fisica naturale a quello che altrimenti sarebbe un rigido tracciamento del cursore.
Ripristino alla posizione iniziale al rilascio
Quando termina un trascinamento (last: true nello stato del gesto), in genere si riporta l'elemento alla posizione di origine. Si chiama api.start({ x: 0, y: 0 }) all'interno di un controllo if (last). react-spring anima il ritorno con la fisica delle spring — un leggero rimbalzo anziché un ripristino istantaneo — dando all'interazione una piacevole sensazione fisica.
Lancio con la velocità
Il valore velocity nello stato del gesto permette di implementare il comportamento di lancio. Quando l'utente rilascia l'elemento con una velocità elevata, è possibile lanciarlo nella direzione del trascinamento invece di riportarlo indietro. Si controlli if (last && velocity[0] > threshold) e poi si animi l'elemento fino alla posizione finale fuori dallo schermo. Questo è essenziale per le interazioni swipe-to-dismiss.
Limiti del trascinamento e clamping
Per limitare il movimento di trascinamento all'interno di un contenitore, si applica il clamping ai valori di movimento prima di passarli alla spring: x: Math.max(-maxX, Math.min(maxX, movement[0])). In alternativa, è possibile usare l'opzione bounds integrata in use-gesture: useDrag(handler, { bounds: { left: -100, right: 100 } }) per applicare automaticamente il clamping allo stato del gesto.
Schema swipe-to-dismiss
Un'implementazione mobile dello swipe-to-dismiss consiste nell'usare useDrag per tracciare il movimento orizzontale. Se l'utente rilascia l'elemento con una velocità superiore a una soglia OPPURE lo ha spostato per più della metà della larghezza dello schermo, si anima la scheda portandola fuori dallo schermo (api.start({ x: window.innerWidth })) e poi la si rimuove dall'elenco. In caso contrario, la si riporta al centro.
usePinch per le interazioni di zoom
usePinch riconosce i gesti di pizzicamento a due dita sui touchscreen e l'uso di Ctrl+rotellina sui computer desktop. Lo stato del gesto include scale (livello di zoom corrente relativo all'inizio del pizzicamento) e origin (punto centrale del pizzicamento). Collegandolo a una spring che controlla la scala, è possibile creare interazioni di zoom fluide e limitate su immagini o mappe.
useHover e useMove
useHover si attiva quando il puntatore entra o esce da un elemento e fornisce un valore booleano active. useMove traccia la posizione del mouse all'interno di un elemento e fornisce coordinate normalizzate. Entrambi sono utili per creare effetti hover magnetici, in cui gli elementi si spostano leggermente verso il cursore quando questo si avvicina.
Combinare più gesti
Gli hook di use-gesture possono essere combinati. È possibile usare useDrag e usePinch sullo stesso elemento: const bindDrag = useDrag(...); const bindPinch = usePinch(...), quindi distribuire entrambe le funzioni bind: ...bindDrag() ...bindPinch(). use-gesture distingue automaticamente i diversi tipi di gesto.
Scopo della funzione bind()
A cosa serve la funzione bind() restituita dagli hook di use-gesture?
Riepilogo della lezione: integrazione di use-gesture
@use-gesture/react fornisce useDrag, usePinch, useScroll, useHover e useMove. Ogni hook restituisce una funzione bind(), il cui risultato distribuito collega gli eventi dei gesti agli elementi DOM. Lo stato del gesto fornisce movement, velocity, direction, first e last. La combinazione con la funzione imperativa api.start() di react-spring permette di creare animazioni interattive basate sulla fisica. Si utilizzi velocity per i lanci e le chiusure e bounds per limitare il movimento.
Impara React con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 88
- Lezioni
- 324
Domande Frequenti
La lezione «Animazioni basate sui gesti con use-gesture» è gratuita?
Sì — il testo completo di «Animazioni basate sui gesti con use-gesture» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso React Academy, passa a CoddyKit PRO. Il corso React Academy include 4 lezioni in totale.
Cosa imparerò in «Animazioni basate sui gesti con use-gesture»?
Combinare react-spring con @use-gesture/react per creare animazioni guidate da trascinamento, pinch e scorrimento Eserciti React Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare React Academy?
Non è richiesta alcuna esperienza precedente. React Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.
Quanto tempo richiede la lezione «Animazioni basate sui gesti con use-gesture»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione React Academy?
Sì. Ogni lezione React Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Fondamenti di React Spring: hook useSpring
- Componenti animati e interpolazione degli stili
- useTrail e useChain per le sequenze
- Animazioni basate sui gesti con use-gesture