Inertial scrolling is not an undoable unit
Aliases: continuous manipulation · pan not a command · viewport not undo
What it is
Pan, inertial scroll, pinch, and canvas rotate change continuous viewport or ink state. They are not commands for an undo stack. People do not expect “undo that scroll” to jump three screens back; they scroll back. Undoing continuous manipulation floods the stack and buries a real archive or delete.
Why it happens
A command has a crisp commit boundary: one swipe archives, one tap sends. Continuous manipulation has an arbitrary boundary—every frame of offset could be a “command,” so granularity cannot be defined. Where inertia stops is already unpredictable; there is no user-agreed “previous step.” Reverse pan and reverse pinch are the compensation, part of control itself, not a ledger. Pushing viewport changes onto undo also races text-editing undo, and shake-to-undo becomes a joke about undoing a scroll.
Studying it
After an inertial stop on a long list, ask what “undo” should do. Record expectations (return to fling start / undo last edit / the question makes no sense). If every scroll is pushed onto the stack, measure how unreachable real edit-undo becomes. That is an expectation survey plus stack-pollution measure; there is no need to invent an “undo rate” for continuous manipulation.
Where it stops holding
“Scroll to this bookmark / restore reading position” is an explicit command and may be stacked, but a button or leaving the page fires it, not inertia itself. In drawing, a stroke defined as a command can land on the stack at lift-off—that is continuous input sliced into units. “Reset zoom” as a button is also a command. No undo on continuous gestures does not mean a misfired paging swipe has no undo.
Applying it
- Do not push every change of
contentOffsetor scale onto the undo stack. - Compensate the viewport by following (scroll again, double-tap to reset scale), not with an undo control.
- In a document with editing, shake or tap undo: it should undo typing or deletion, not the last scroll.
Related
- Same group: C3.33.1 Gesture-triggered actions follow the same undo rules as taps · C3.33.2 Some gestures offer a brief undo window instead of taking effect at once · C3.33.4 Irreversible gesture actions should raise the trigger bar, not only offer undo
- Adjacent: C3.06 Fling and inertia · C3.07 Pan
- Search:
undo granularity·continuous manipulation·viewport state