Animações orientadas por gestos com use-gesture
Combine react-spring com @use-gesture/react para criar animações controladas por arraste, pinça e rolagem.
Animações orientadas por gestos com use-gesture é uma aula grátis de React Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de React Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de React Academy inclui 4 aulas no total.
Visão geral de @use-gesture/react
@use-gesture/react é uma biblioteca de reconhecimento de gestos projetada para funcionar perfeitamente com react-spring. Ela reconhece gestos de arrastar, pinçar, rolar, passar o cursor, mover e girar a roda, fornecendo um estado de gesto normalizado que pode ser encaminhado diretamente às funções de atualização da mola para criar interações fluidas baseadas em física.
Estado do gesto useDrag
O gancho useDrag dispara uma função de retorno de chamada a cada evento de arrastar. A função recebe um objeto de estado do gesto com propriedades principais: movement (deslocamento total desde o início do arrasto), velocity (velocidade atual), direction (1 ou -1 em cada eixo), first (true no início do arrasto), last (true no fim do arrasto) e event (o evento bruto do DOM).
A função bind()
Todos os ganchos de use-gesture retornam uma função bind(). Chamar bind() retorna um objeto de propriedades de manipuladores de eventos (onPointerDown, onTouchStart etc.) que você expande no elemento que deseja tornar interativo. Esse é o ponto de ligação entre o reconhecedor de gestos e o seu elemento do DOM.
Combinando useDrag com react-spring
O padrão comum é criar uma mola com a API imperativa ([springs, api] = useSpring(...)) e então usar useDrag para chamar api.start({ x: movement[0], y: movement[1] }) a cada evento de arrasto. A mola acompanha suavemente o movimento do arrasto, adicionando uma física natural ao que, de outra forma, seria um rastreamento rígido do cursor.
Voltar ao soltar
Quando um arrasto termina (last: true no estado do gesto), normalmente você faz o elemento voltar à origem. Chame api.start({ x: 0, y: 0 }) dentro de uma verificação if (last). O react-spring anima o retorno com física de mola — um salto suave em vez de uma redefinição instantânea — proporcionando uma sensação física agradável à interação.
Arremesso e lançamento com velocidade
O valor de velocity no estado do gesto permite criar um comportamento de arremesso. Quando o usuário solta o elemento com alta velocidade, você pode lançá-lo na direção do arrasto em vez de fazê-lo voltar. Verifique if (last && velocity[0] > threshold) e então anime o elemento até sua posição final fora da tela. Isso é essencial para interações de deslizar para dispensar.
Limites e contenção do arrasto
Para restringir o movimento de arrasto dentro de um contêiner, limite os valores de movimento antes de passá-los à mola: x: Math.max(-maxX, Math.min(maxX, movement[0])). Como alternativa, use a opção bounds integrada ao use-gesture: useDrag(handler, { bounds: { left: -100, right: 100 } }) para limitar automaticamente o estado do gesto.
Padrão de deslizar para dispensar
Uma implementação móvel de deslizar para dispensar: use useDrag para acompanhar o movimento horizontal. Se o usuário soltar o elemento com velocidade acima de um limite OR tiver percorrido mais da metade da largura da tela, anime o cartão para fora da tela (api.start({ x: window.innerWidth })) e depois remova-o da lista. Caso contrário, faça-o voltar ao centro.
usePinch para interações de ampliação
usePinch reconhece gestos de pinça com dois dedos em telas sensíveis ao toque e Ctrl+roda do mouse no computador. O estado do gesto inclui scale (nível atual de ampliação em relação ao início da pinça) e origin (ponto central da pinça). Conecte-o a uma mola que acompanhe a escala para criar interações de ampliação suaves e limitadas em imagens ou mapas.
useHover e useMove
useHover é acionado quando o ponteiro entra ou sai de um elemento, fornecendo um valor booleano active. useMove acompanha a posição do mouse dentro de um elemento, fornecendo coordenadas normalizadas. Ambos são úteis para efeitos magnéticos ao passar o cursor, nos quais os elementos se deslocam sutilmente em direção ao cursor conforme ele se aproxima.
Combinando vários gestos
Os ganchos de use-gesture podem ser compostos. Você pode usar useDrag e usePinch no mesmo elemento: const bindDrag = useDrag(...); const bindPinch = usePinch(...) e então expandir as duas funções bind: ...bindDrag() ...bindPinch(). O use-gesture diferencia automaticamente os tipos de gesto.
Finalidade da função bind()
O que a função bind() retornada pelos ganchos de use-gesture faz?
Recapitulação da lição: integração com use-gesture
@use-gesture/react fornece useDrag, usePinch, useScroll, useHover e useMove. Cada gancho retorna uma função bind(), cuja expansão conecta os eventos de gesto aos elementos do DOM. O estado do gesto fornece movement, velocity, direction, first e last. Combine-o com a função imperativa api.start() do react-spring para criar animações interativas baseadas em física. Use velocity para arremessos e dispensas e bounds para limitar o movimento.
Aprenda React com um tutor de IA — grátis
Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.
- Cursos
- 88
- Aulas
- 324
Perguntas Frequentes
A aula “Animações orientadas por gestos com use-gesture” é grátis?
Sim — o texto completo de “Animações orientadas por gestos com use-gesture” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de React Academy, atualize para CoddyKit PRO. O curso de React Academy inclui 4 aulas no total.
O que vou aprender em “Animações orientadas por gestos com use-gesture”?
Combine react-spring com @use-gesture/react para criar animações controladas por arraste, pinça e rolagem. Você pratica React Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar React Academy?
Nenhuma experiência prévia é necessária. React Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “Animações orientadas por gestos com use-gesture”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de React Academy?
Sim. Cada aula de React Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Fundamentos do React Spring: hook useSpring
- Componentes animados e interpolação de estilos
- useTrail e useChain para sequências
- Animações orientadas por gestos com use-gesture