DragEffect/ useDragEffect

Full drag lifecycle using PointerEvent for unified mouse/touch/pen support. Supports 3 phases (grab, move, release) with independent options.

Drag me
16px
1000ms
Grab
Release
150ms
import { useDragEffect } from '@onomatope/react'

function MyComponent() {
  const ref = useDragEffect<HTMLDivElement>({
    texts: ['drag~', 'scrrrr'],
    tone: 'drift',
    color: '#4a4a4a',
    phases: {
    grab: { texts: ['GRAB!'], tone: 'pop' },
    release: { texts: ['DROP!'], tone: 'drop', size: 20 },
  },
  })
  return <div ref={ref}>...</div>
}

Options

OptionTypeDefaultDescription
textsstring[]["POP!"]Default text for all phases
toneTone"pop"Default animation style
colorstring"#666666"Default text color
phases.grabOptions | falsebase optionsOptions for pointerdown (drag start)
phases.moveOptions | falsebase optionsOptions for pointermove (dragging)
phases.releaseOptions | falsebase optionsOptions for pointerup (drag end)
moveThrottlenumber100Minimum ms between move-phase effects

Notes

  • Uses PointerEvent for unified mouse, touch, and pen support
  • Move/release listeners attach to document for out-of-element dragging
  • Set a phase to false to disable it