The inner scroller hands off to the outer after hitting an edge
Aliases: scroll chaining · nested scrolling · overflow handoff
What it is
After an inner list hits its end, leftover finger travel should hand off to the outer container so the page keeps moving. That is scroll chaining: one contact, two owners in sequence, split at the inner content edge. It is not the onset contest for who owns the touch—the inner view may still be the owner—it is a transfer of leftover delta once the inner view can no longer consume it.
Why it happens
The inner view eats dy inside its min/max offset. When offset + dy would leave that range, the remainder overflow becomes the outer view’s input. Android’s nested scrolling protocol and bounce negotiation between child and parent UIScrollView on iOS are both accounting for that remainder. The handoff has to happen on later frames of the same touch, not after a lift and a second press. If the inner view swallows the remainder (rubber-band exclusive), the outer view never sees motion and the user feels stuck in the child. If the inner view shares delta before the edge, the child is yanked away early.
Studying it
On a nest with known inner scroll range, roll from mid-child toward the outer, and log inner versus outer offset deltas on the frame that crosses the edge. Measures include whether remainder is conserved (inner stop + outer start ≈ finger travel) and whether a second gesture is required. Factors include inner bounce and outer bounce. Code “at edge, no handoff” and “handoff before edge” as different failures.
Where it stops holding
A child designed as a closed drawer (must be dismissed explicitly) should not chain at the edge. Whether a pager on its last page should drag the outer vertical list is a product choice, not physics. Wheel chaining is often killed in browsers with overscroll-behavior and does not match touch defaults. Handoff is the edge transfer; it is not who owns the touch at onset, and it is not the stutter felt at the transfer instant.
Applying it
- Once the inner view hits min/max, pass overflow to the outer inside the same touch; do not demand a new press.
- Cut the chain for lock-in children (pickers, drawers) and use bounce at the edge to say “this is the end.”
- From mid-child, roll across the boundary in one stroke: child stops, parent moves, remainders add up; if a lift is required, the handoff is missing.