Pull-to-refresh
Dragging past the top of a touch list to reload it, with resistance and a release threshold that prevent accidental refreshes.
See it
What it is
Pull-to-refresh turns overscrolling at the top of a touch list into a reload gesture. The content follows the finger with resistance, an indicator appears above it, and releasing past a threshold requests fresh data. Loren Brichter shipped it in Tweetie 2 for iPhone in 2009 and it became standard feed behavior within a couple of years. Twitter bought the app, patented the gesture, then pledged under its Innovator's Patent Agreement not to use that patent offensively.
Reach for it on touch-first feeds, inboxes, and timelines where people return often and new content is expected. It works best as a shortcut beside automatic refresh or a visible Refresh control, not as the only way to update data.
The gotcha is accidental activation at the scroll boundary. Add resistance, require a clear threshold, and let go without refreshing when the pull is short. Also avoid fighting the browser's own page refresh, preserve the current scroll position after new rows arrive, and announce completion because a hidden gesture cannot be the only feedback.
Ask AI for it
Implement pull-to-refresh on this touch list. Set overscroll-behavior-y: contain on its scroll container, start tracking touchstart and touchmove only when scrollTop is 0 and the finger moves downward, and register touchmove with passive: false only for the custom pull. Translate the list by 35% of the drag distance, cap it at 96px, and arm refresh at 72px. On release, snap to an inline spinner, run the fetch with AbortController, prepend new items without losing scroll position, then return to 0. Provide a visible Refresh button and announce 'Updated' through aria-live='polite'.