Skip to content
easeweb
Search topics

Scrolling tickers and animations that can't be paused

An announcement bar scrolls its messages sideways without end, or swaps them every few seconds, and the only way to stop it is to hold a mouse pointer over it.

WCAG 2.2
SC 2.2.2ASC 2.3.1A
Required by
Section 508 · EN 301 549 (EU)
Broken animation: ticker 30s linear infinite;
The accessibility problem illustrated: It never stops. Only a mouse can pause it.
01

The problem

People who can't read moving text, or can't look away from it, have no way to stop the scrolling announcements without a mouse.

02

Try it

Try to stop the moving announcements, first with the mouse, then with Tab.

Hovering pauses it only while the pointer stays there, and Tab finds nothing that stops it. Broken 2 is the slider version: its arrows change the message, but the timer carries on. "Stop demo" is the Learn page’s own button, not the shop’s.

Broken Can you fix this?

  • Free delivery on orders over $50
  • Autumn sale: up to 30% off until 31 October
  • New: linen shirts in five colours

Linen for every season

Washed soft, woven to last, and made in small runs.

Shop shirts

A recreated demo. The broken version is intentionally inaccessible.

03

The fix

Let the announcements stay still, show one at a time with Previous and Next buttons, or give them a Pause button that stops them and shows every message.

  1. 1Nothing moves by itself for more than five seconds unless a button beside it stops it.
  2. 2Pausing on hover or focus is an extra, never the way to stop it.
  3. 3Once still, every message can be read, in view or a button press away.
Before An announcement bar that only a mouse can pause

html

<div class="ticker">  <div class="ticker-track">    <ul>      <li>Free delivery on orders over $50</li>      <li>Autumn sale: up to 30% off until 31 October</li>      <li>New: linen shirts in five colours</li>    </ul>    <!-- The same three messages again, so the loop has no gap. -->    <ul aria-hidden="true">…</ul>  </div></div>

html

<!-- Or the same messages as a slider, one at a time. --><div class="notice-bar">  <button type="button" class="notice-prev">    <svg aria-hidden="true" focusable="false"><use href="#icon-previous"></use></svg>    <span class="visually-hidden">Previous announcement</span>  </button>  <ul class="notices">    <li>Free delivery on orders over $50</li>    <li hidden>Autumn sale: up to 30% off until 31 October</li>    <li hidden>New: linen shirts in five colours</li>  </ul>  <button type="button" class="notice-next">    <svg aria-hidden="true" focusable="false"><use href="#icon-next"></use></svg>    <span class="visually-hidden">Next announcement</span>  </button></div>
After

The messages stay still

<ul class="notices">  <li>Free delivery on orders over $50</li>  <li>Autumn sale: up to 30% off until 31 October</li>  <li>New: linen shirts in five colours</li></ul>

Fixing this with an AI coding assistant? Get this guide as Markdown

04

Verify the fix

5 checks.

Test with: Keyboard, Mouse, Reduced motion, Zoom, Screen reader

0 of 5 checked

Record the OS, browser and assistive-technology versions, the build, the date, and the actual result of each step. Repeat after the bar, its messages or its library change.

Limits

This is a starting pattern, not a guarantee for every application. It covers movement only: flashing, more than three times in any one second, is a separate check under 2.3.1, made with a flash analysis tool rather than by eye. Whether the movement is essential, and whether the page is calm enough once it is stopped, still needs a person to judge.

This is a recreated teaching example, not a finding about a named client. The code is a starting pattern: test it in your own product. No completed assistive-technology test is claimed here.

Keep this fixed as your code changes.

Turn guides like this into rules your coding agents and CI follow, then have the result retested with a keyboard and screen readers.

How retests work