- Success Criterion 2.5.2
- Conformance level A
Drag Interaction That Commits With No Way to Cancel
2.5.2 — Pointer Cancellation
Scenario
Setting
A language-learning app's lesson screen
What’s wrong
Drag interactions committing on down with no escape/undo before completion.
Example
tile.addEventListener('dragstart', () => {
recordAnswer(tile.word); // the answer is locked in the moment the tile lifts
}); Why it matters
A learner who just wanted to reposition a tile to read it gets marked as having answered before dropping it anywhere.
How to test
Start a drag interaction and release immediately without completing it: if it already committed on mousedown with no way to abort, it fails.
How to fix
Only commit the answer on drop over a valid target, and let a drag that ends elsewhere cancel with no penalty.
tile.addEventListener('dragend', (e) => {
if (isOverValidTarget(e)) recordAnswer(tile.word);
}); Outcome
A learner can pick up a tile, change their mind, and drop it back down with no answer recorded.
Who is affected
People with motor impairments who often need to reposition a grip mid-drag without it counting as a choice.
Learn more
- Understanding Understanding document (opens in a new tab)
Related scenarios
- Action That Fires the Instant the Pointer Goes Down
- Button Firing on Touchstart Instead of Release
- Menu That Opens and Selects on the Same Press-and-Drag
- Destructive Action Firing on Press With No Way to Abort
- Press-to-Trigger Control Where Release Confirmation Was Possible
- Custom Gesture That Commits Mid-Motion Instead of on Release