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 framesTracks every moveGood
Departs 08:40 · Gate B12
Seat 14C · Aisle
Bag drop closes 07:55
pointermove → translateY(y)0 framespointermove: 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
All clear.
el.on("swipeleft", open)Progressive revealGood
All clear.
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.