• 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