Skip to content

useGesture

@hua-labs/hua/motion

bash
npm install @hua-labs/hua
tsx
import { useGesture } from "@hua-labs/hua/framework";

tsx
const gesture = useGesture({
  onSwipe: (direction) => console.log('Swiped:', direction),
  onTap: (x, y) => console.log('Tapped at:', x, y),
});

return (
  <div
    onTouchStart={gesture.onTouchStart}
    onTouchMove={gesture.onTouchMove}
    onTouchEnd={gesture.onTouchEnd}
    onMouseDown={gesture.onMouseDown}
    onMouseMove={gesture.onMouseMove}
    onMouseUp={gesture.onMouseUp}
  >
    Touch or click me
  </div>
);

-
0
No

enabledbooleantrueEnable/disable gesture detection
thresholdnumber10Tap detection threshold (px)
timeoutnumber300Tap timeout (ms)
swipeThresholdnumber50Minimum swipe distance (px)
swipeVelocitynumber0.3Minimum swipe velocity (px/ms)
onSwipe(direction, distance, velocity) => void-Called on swipe (up/down/left/right)
onPinch(scale, delta) => void-Called on pinch gesture
onRotate(angle, delta) => void-Called on rotate gesture
onPan(deltaX, deltaY, totalX, totalY) => void-Called on pan/drag movement
onTap(x, y) => void-Called on tap
onDoubleTap(x, y) => void-Called on double tap (within 300ms)
onLongPress(x, y) => void-Called on long press (500ms hold)

isActivebooleanWhether a gesture is in progress
gesturestring | nullCurrent gesture type (e.g. "swipe-up", "pinch", "pan")
scalenumberCurrent pinch scale
rotationnumberCurrent rotation angle
deltaXnumberHorizontal movement delta
deltaYnumberVertical movement delta
distancenumberTotal gesture distance
velocitynumberCurrent gesture velocity
onTouchStart(e: TouchEvent) => voidTouch start handler to attach to element
onTouchMove(e: TouchEvent) => voidTouch move handler
onTouchEnd(e: TouchEvent) => voidTouch end handler
onMouseDown(e: MouseEvent) => voidMouse down handler
onMouseMove(e: MouseEvent) => voidMouse move handler
onMouseUp(e: MouseEvent) => voidMouse up handler
start() => voidEnable gesture detection
stop() => voidDisable gesture detection
reset() => voidReset gesture state

tsx
const gesture = useGesture({
  onSwipe: (direction) => {
    if (direction === 'left') goToNext();
    if (direction === 'right') goToPrev();
  },
  swipeThreshold: 80,
});

// Current gesture state
console.log(gesture.gesture);  // "swipe-left"
console.log(gesture.velocity); // 1.5