Keep feedback continuous

Track the finger the whole way, not only on release.

From apple-design, §1 Response and §10 Gesture details.

Drawer follows, then settles

Drag each handle up, stop halfway, then flick.

Animates on releaseBad

Departs 08:40 · Gate B12

Seat 14C · Aisle

Bag drop closes 07:55

pointerup → classList.toggle("open")0 frames
Tracks every moveGood

Departs 08:40 · Gate B12

Seat 14C · Aisle

Bag drop closes 07:55

pointermove → translateY(y)0 frames
pointermove: sheet.style.transform = `translateY(${y}px)`
pointerup:   spring({ from: y, to: target, velocity: v })

Update on input, not change

Drag both sliders slowly, or type a level.

Updates on changeBad
40

0 renders

range.addEventListener("change", render)
Updates on inputGood
40

0 renders

range.addEventListener("input", render)

Reveal, don't recognize

Swipe a row left slowly, then all the way.

swipeleft eventBad

    el.on("swipeleft", open)
    Progressive revealGood

      pointermove → translateX(dx)

      Why it matters, pros and cons

      Why it matters

      While a finger is down, the object is part of the hand. Don't wait for release.

      Pros

      • User can stop, reverse or commit midway.
      • Release hands real velocity to the settle.
      • Makes full swipes and flicks possible.

      Cons

      • More code: capture, hysteresis, velocity, a spring.
      • Per-move work must stay transform and opacity only.
      • Persist on release; saves and network stay on commit.