Bread n butter utility for component-tied mouse/touch gestures in React and Vanilla Javascript.
Bread n butter utility for component-tied mouse/touch gestures in React and Vanilla Javascript.
The demos are real click them!
## Installation ### React ```bash #Yarn yarn add @use-gesture/react #NPM npm install @use-gesture/react ``` ### Vanilla javascript ```bash #Yarn yarn add @use-gesture/vanilla #NPM npm install @use-gesture/vanilla ``` ### [Full documentation website](https://use-gesture.netlify.com) - [Available Gestures](https://use-gesture.netlify.com/docs/gestures) - [Gesture State](https://use-gesture.netlify.com/docs/state) - [Gesture Options](https://use-gesture.netlify.com/docs/options) - [FAQ](https://use-gesture.netlify.com/docs/faq) ### Simple example React ```jsx import { useSpring, animated } from '@react-spring/web' import { useDrag } from '@use-gesture/react' function Example() { const [{ x, y }, api] = useSpring(() => ({ x: 0, y: 0 })) // Set the drag hook and define component movement based on gesture data. const bind = useDrag(({ down, movement: [mx, my] }) => { api.start({ x: down ? mx : 0, y: down ? my : 0 }) }) // Bind it to a component. return } ``` Vanilla javascript ```html ``` ```js // script.js const el = document.getElementById('drag') const gesture = new DragGesture(el, ({ active, movement: [mx, my] }) => { setActive(active) anime({ targets: el, translateX: active ? mx : 0, translateY: active ? my : 0, duration: active ? 0 : 1000 }) }) // when you want to remove the listener gesture.destroy() ``` The example above makes a `div` draggable so that it follows your mouse on drag, and returns to its initial position on release. **Make sure you always set [`touchAction`](https://developer.mozilla.org/en-US/docs/Web/CSS/touch-action) on a draggable element to prevent glitches with the browser native scrolling on touch devices**. ### Available hooks @use-gesture/react exports several hooks that can handle different gestures: | Hook | Description | | ------------ | ------------------------------------------ | | `useDrag` | Handles the drag gesture | | `useMove` | Handles mouse move events | | `useHover` | Handles mouse enter and mouse leave events | | `useScroll` | Handles scroll events | | `useWheel` | Handles wheel events | | `usePinch` | Handles the pinch gesture | | `useGesture` | Handles multiple gestures in one hook | #### [More on the full documentation website...](https://use-gesture.netlify.app/)No open issues yet, or sync has not completed.