← All criteria

Operable · Level A · 2.5.4

Motion Actuation

A function that's triggered by shaking, tilting, or gesturing at the device — 'shake to undo,' 'tilt to scroll' — needs a normal on-screen control that does the same thing, plus a way to turn the motion trigger off, since not everyone can physically produce that movement.

  • Motor

How to recognize it

Look for features that respond to device movement or camera-sensed gestures rather than a tap or click: shake-to-undo, tilt-to-navigate, wave-to-dismiss. If the only way to trigger that function is the physical motion, with no equivalent button or menu item anywhere, that's the failure. This falls hardest on people with motor impairments or tremors who can't reliably perform a specific motion, and on anyone whose device is mounted in a fixed position — a wheelchair mount, a tripod — who physically cannot tilt or shake the device at all, regardless of desire or ability otherwise.

How to fix it

Give every motion-triggered function a standard interface equivalent — a visible button, a menu item — that achieves the same result without requiring physical movement. Also provide a setting to turn off motion actuation entirely, since an accidental shake or tilt can otherwise trigger the function unintentionally for people who can't easily avoid incidental movement. The one narrow exception is when the motion itself is essential to what's being measured — a pedometer or a step-counting feature that specifically needs device motion as its input has nothing to substitute it with, since removing the motion removes the entire point of the feature.

Example

Avoid

window.addEventListener('devicemotion', (e) => {
  if (isShake(e)) undoLastAction();
});
/* shake-to-undo with no on-screen undo button and no way to disable shake detection */

Prefer

window.addEventListener('devicemotion', (e) => {
  if (isShake(e) && shakeToUndoEnabled) undoLastAction();
});
/* shake is optional and toggleable; a visible "Undo" button does the same thing */

Resources