Displacement and duration thresholds jointly define a tap
Aliases: touch slop · tap timeout · movement slop
What it is
Whether a contact counts as a tap is decided by two gates: a displacement threshold (touch slop / movement slop) and a duration threshold. The first says how far the contact may travel and still be “still”; the second says how long it may last and still be “brief.” Both must pass. Distance alone would swallow long-presses; time alone would swallow small slides.
Why it happens
A finger never lands perfectly still: the patch deforms, the arm trembles, and the reported point jumps a few pixels. The system therefore draws a slop circle around the down site; move events inside it remain candidate taps. A timer watches contact duration in parallel; overtime hands the contact to a long-press or other hold semantics. The moment the point leaves the circle, the tap candidate dies and later events go to a drag or scroll recognizer. A tap is the intersection: short, and almost unmoved. Thresholds are stored in pixels or millimetres, so the same number is not equivalent across DPI and grips.
Studying it
Plot contact traces around the down site and mark the radius and instant at which the classifier switches. Independent variables include slop radius, hold timeout, target width, and whether a scroll parent exists; dependent measures include tap hit rate, scrolls that fired a click, and intended taps eaten as drags. Collect separately for one-handed thumb and two-handed index use: a thumb’s arc exits slop earlier. Tuning only one threshold hides joint error: looser slop swallows short drags; a tighter timeout shoves hesitant taps into long-press.
Where it stops holding
Switch-control, Parkinsonian tremor, or other motor noise turns “a few pixels of jitter” into continuous drift, and a fixed slop throws away legitimate taps. A stylus or mouse-emulated pointer jitters less, so overly wide slop turns intended short drags into taps. A button inside a scroll view often has its effective slop consumed by the parent recognizer; the app never sees the raw threshold. A coordinate jump across a foldable hinge can make a still contact look as if it travelled far.
Applying it
- Set slop in physical millimetres and convert by density; keep the tap timeout below the long-press threshold with a gap, not two values glued together.
- For tappable objects in scrollers, keep a short “could still be a tap” window before the scroll recognizer captures the pointer.
- Accept with three deliberate actions: a clean tap, a press held for long-press, and an immediate light drag. Count cross-classifications and retune until both false taps and lost taps are acceptable.