Animated or auto-updating content has pause/play controls
Why it matters
Auto-playing carousels, tickers, or looping animations that run without pause controls cause concentration difficulties for users with attention disorders and can trigger seizures in photosensitive users if they flash. WCAG 2.2 SC 2.2.2 (Pause, Stop, Hide) is a Level A requirement for any animation or auto-updating content that lasts more than 5 seconds. Carousels are the most common violator — they advance silently and provide no control.
Severity rationale
Low because the violation is bounded to components with animations longer than 5 seconds, but for affected users — particularly those with vestibular disorders or ADHD — the inability to pause is a real usability blocker per WCAG 2.2 SC 2.2.2.
Remediation
Add pause/play controls to any animation that runs longer than 5 seconds. Respect the user's prefers-reduced-motion preference to disable motion entirely for users who have set it.
export function AutoCarousel({ slides }: { slides: React.ReactNode[] }) {
const [isPlaying, setIsPlaying] = useState(true)
const [current, setCurrent] = useState(0)
useEffect(() => {
if (!isPlaying) return
const timer = setInterval(() => setCurrent(i => (i + 1) % slides.length), 4000)
return () => clearInterval(timer)
}, [isPlaying, slides.length])
return (
<div>
<button
onClick={() => setIsPlaying(p => !p)}
aria-label={isPlaying ? 'Pause carousel' : 'Play carousel'}
>
{isPlaying ? <PauseIcon /> : <PlayIcon />}
</button>
{slides[current]}
</div>
)
}
Also add @media (prefers-reduced-motion: reduce) { animation: none; } to your global CSS for all decorative motion.
DetectionPro
The detection method for this pattern is part of AuditBuffet Pro.
The full method (what to look for, pass and fail conditions, and how results get reported) ships inside the Accessibility WCAG Compliance Audit. The pattern definition, severity rationale, and remediation remain openly licensed under CC-BY-4.0.
External references
- wcag:2.2 · 2.2.2 — Pause, Stop, Hide
- section-508:2018-refresh · 501.1 — Scope
Taxons
History
- 2026-04-18·v1.0.0·Initial import from accessibility-wcag·automated