Co oznacza to kryterium
Automatyczny ruch, miganie lub przewijanie trwające ponad pięć sekund obok innych treści wymagają możliwości wstrzymania, zatrzymania lub ukrycia. Automatyczne aktualizacje obok innych informacji wymagają kontroli bez progu pięciu sekund; można też pozwolić ustawić częstotliwość. Wyjątek dotyczy niezbędnej części czynności.
Pauza pomaga osobom z trudnościami koncentracji i pamięci oraz osobom słabowidzącym, które potrzebują spokojnie odczytać treść. Zastępowanie informacji może też utrudniać pracę czytnikiem osobom niewidomym. To uzasadnienie potrzeby, bez wyniku VoiceOver z opisanej demonstracji.
Przykłady błędów i poprawek
Dwie niezależne pauzy i dalsza praca
Własna „Pracownia” pokazuje syntetyczne zamówienie #1042, godziny pon.–pt. 9:00–17:00 i adres ul. Przykładowa 10. Obok godzin przesuwa się „Odbierz paczkę do piątku”, a co około 2 sekundy zmienia się odczyt liczby paczek, zaczynając od 4. Ruch obejmuje 80 pt w jedną stronę przez 4 s, potem powrót, bez błysków lub zmian jasności.
- Problem
- W bad komunikat i licznik zmieniają się automatycznie, bez dostępnej pauzy i bez niezbędności.
- Skutek
- Ruch rozprasza podczas odczytu godzin, a zmieniany tekst narzuca tempo czytania.
- Poprawka
- Dodaj działające kontrole ruchu i aktualizacji. Pauza ma trwać po odejściu od kontrolki, pozwalając nadal używać adresu.
Good ma te same dane i źródła zmian, lecz dwie nazwane kontrole. W bad wybór wariantu i reset są zablokowane do naturalnego końca, aby nie tworzyły ukrytej pauzy. Koniec po 90 s nie usuwa bariery ponad pięciu sekund; zakończenie procesu w laboratorium nie jest kontrolą treści.
- Po wejściu do good ruch i aktualizacje zaczynają się automatycznie. Obserwacja źródłowa potwierdziła zmiany również po ponad 6 s.
- „Wstrzymaj ruch” zatrzymuje pozycję, a licznik nadal rośnie.
- „Wstrzymaj aktualizacje” zatrzymuje odczyt. „Pokaż adres” nadal ujawnia adres, bez wznowienia któregokolwiek źródła zmian.
- Ponad 7 s później oba stany nadal są wstrzymane. Użytkownik nie trzyma palca ani fokusu na pauzie.
- „Wznów ruch” uruchamia kartę, pozostawiając licznik zatrzymany. Osobne „Wznów aktualizacje” kontynuuje przyrost bez nadrabiania.
Kadry i cichy film pochodzą z rzeczywistego Flutter/Cupertino na iPhone 17 Simulator / iOS 26.5, 2026-10-02. Odczyty są lokalną symulacją, bez aktualnego stanu punktu.

Stan początkowy. Nieruchomy kadr nie dowodzi ruchu; dowód jest w sekwencji, filmie i pomiarze.

Po co najmniej 7 s odczyt i pozycja pozostały stałe. Sam PNG nie jest pomiarem czasu.

Te same dane oraz logika zmian. Numer odczytu różni się przez czas przechwycenia; kadry nie są atomową parą.
Pełny opis cichego filmu
Istniejący eksport H.264, 37,866667 s, bez audio. Film pokazuje ruch i dotknięcia, bez nagrania czytnika. Normalizacja do 60 fps nie odzyskuje brakujących klatek.
- 0–15 s: komunikat przesuwa się nad kontrolami, liczba paczek rośnie, godziny pozostają stałe.
- Około 15 s: dotknięcie „Wstrzymaj ruch” zatrzymuje kartę; licznik nadal się zmienia.
- Około 21 s: „Wstrzymaj aktualizacje” zachowuje odczyt 12 i 16 paczek; tekst informuje o wstrzymaniu.
- Około 22 s: „Pokaż adres” ujawnia ul. Przykładową 10. Reszta interfejsu działa, obie pauzy trwają.
- Około 30 s: „Wznów ruch” uruchamia kartę; licznik pozostaje zatrzymany.
- Około 32 s: „Wznów aktualizacje” przywraca przyrost; końcowy odczyt to 13 i 17 paczek.
Czasy są orientacyjne względem filmu, bez pomiaru opóźnienia dotknięcia. Źródło ma 37,861667 s i 1221 rzeczywistych klatek z nierównymi PTS. Eksport powiela lub usuwa klatki bez interpolacji. W początkowych 0–14 s ruchu mediana odstępu wynosiła 16,667 ms, P95 20 ms, maksimum 200 ms. W pełnej pauzie recorder rzadziej zapisuje nieruchome klatki; największa przerwa to 8,025 s. Czas i trwałość pauz potwierdza zegar XCTest, nie film. Brak mowy nie wymaga transkrypcji wypowiedzi; powyższa sekwencja jest pełną alternatywą tekstową.
Świadomy start
Control początkowo ma nieruchomy komunikat, odczyt 0 i 4 paczki. Przez co najmniej 7,006130 s nic się nie zmienia. Dopiero „Uruchom podgląd” świadomie uruchamia ruch i aktualizacje; reset przywraca spoczynek. To kontrola warunku automatycznego startu, bez zalecenia pomijania pauzy w produkcie.

Nieruchomy stan przed świadomym uruchomieniem; brak zmian potwierdzono osobnymi odczytami.
W good ograniczony ruch systemu powoduje początkową pauzę ruchu, ale licznik ma własną kontrolę. Bad celowo pomija tę preferencję. Sama preferencja nie dowodzi kontroli każdej aktualizacji.
Kiedy obowiązuje i gdzie są wyjątki
Dwie gałęzie wymagania
| Gałąź | Warunki łączne | Dopuszczalna kontrola |
|---|---|---|
| Ruch, miganie, przewijanie | Start automatyczny, ponad 5 s i inna równoległa treść. | Pauza, zatrzymanie lub ukrycie. |
| Automatyczne aktualizacje | Start automatyczny i inna równoległa treść. Bez progu 5 s. | Pauza, zatrzymanie, ukrycie lub częstotliwość. |
Zatrzymanie ruchu najwyżej po 5 s usuwa warunek czasu tej gałęzi, bez pozwolenia na niebezpieczne błyski. Fokus, hover lub pojawienie się elementu w widoku mogą pośrednio uruchomić zachowanie automatyczne. Wejście na ekran nie jest świadomym startem jego animacji; osobny nazwany przycisk zmienia warunek startu.
Pauza ma pozwalać nadal korzystać z ekranu. Trzymanie palca, hover lub pozostawanie fokusu, gdy odejście od razu wznawia ruch, nie zapewniają tej kontroli. Zmiana etykiety bez zatrzymania źródła, zatrzymanie animacji przy działającym liczniku oraz samoczynnie cofana pauza pozostawiają barierę.
Dane okresowe lub transmitowane nie muszą odtwarzać wszystkich pominiętych wartości. Określ, czy wznowienie kontynuuje od miejsca, czy pokazuje aktualny stan. Oznacz zatrzymany odczyt jako wstrzymany, aby nie udawał bieżących danych.
Niezbędność i niezakłócanie
Wyjątek wymaga utraty informacji lub funkcji po usunięciu zachowania, bez równoważnej zgodnej drogi. Chęć przyciągnięcia uwagi i etykieta „na żywo” nie wystarczają. Animacja ładowania może być niezbędna w fazie bez możliwości korzystania z interfejsu, gdy brak wskaźnika sugerowałby awarię; spinner obok działającego formularza nie otrzymuje automatycznie wyjątku.
Dekoracje, reklamy i osadzone treści też mogą zakłócać zadanie. Wymóg niezakłócania WWW i informacyjna nota WCAG2ICT mają odrębny status. W Pracowni godziny i adres pozostają dostępne, więc ruch i licznik nie są niezbędne.
F16/F112/F50 opisują pomocnicze wzorce przewijania i migania bez kontroli. Dawny blink/F47 jest obsolete; nie jest współczesną regułą Fluttera. G4/G186/G11 podają możliwe rozwiązania, bez obowiązku konkretnego API. Wspólna kontrola wszystkich zmian jest dobrą praktyką; osobne skuteczne kontrole też realizują wymaganie. Usunięcie niepotrzebnego ruchu i ręczne odświeżanie są prostymi alternatywami.
Platformy
Interpretacja AI z 2026-10-02: WCAG 2.2 Recommendation 2024-12-12 oraz informacyjne WCAG2ICT Group Note 2025-12-11. Poza WWW odniesienie do strony zastępuje oprogramowanie lub dokument. Nie ustalano zastosowania EN 301 549 ani obowiązku prawnego.
| Środowisko | Warunek i adaptacja | Wykonanie źródłowe |
|---|---|---|
| WWW, także telefon | Dwie gałęzie, również treści osadzone i dekoracyjne. | Niewykonane. |
| Mobile | Te same warunki w oprogramowaniu poza środowiskiem webowym. | Flutter/iOS Simulator; Android niewykonany. |
| Desktop | Np. ruch obok edytora lub zmieniany panel danych. | Niewykonane. |
| Dokumenty | Automatyczna prezentacja obok innych treści; statyczny PDF nie tworzy warunku. | Niewykonane. |
| Wizualny kiosk | Ruch/aktualizacja przy odczycie instrukcji; sprzęt i inne urządzenia wymagają własnego zakresu. | Niewykonane. |
W hybrydzie oddziel część webową i natywną. Control nie spełnia warunku automatycznego startu tej czynności, bez wyłączenia kategorii mobile.
Rozwiązania w technologiach
Fragmenty pokazują trwałe wstrzymanie aktualizacji bez blokowania ekranu. Osobną animację trzeba objąć kontrolą albo usunąć. Oficjalne API sprawdzono w źródle 2026-10-02.
Flutter
Timer? updates;
int count = 4;
bool paused = false;
void resume() {
updates = Timer.periodic(const Duration(seconds: 2), (_) {
setState(() => count++);
});
}
void toggle() => setState(() {
paused = !paused;
updates?.cancel();
if (!paused) resume();
});
// W build: CupertinoButton(onPressed: toggle,
// child: Text(paused ? 'Wznów aktualizacje' : 'Wstrzymaj aktualizacje'))
// Start w initState; updates?.cancel() w dispose.Osadź wewnątrz State z importami dart:async oraz package:flutter/cupertino.dart. Pełny ekran zatrzymuje AnimationController.stop(canceled: false) i wznawia repeat(reverse: true) od bieżącej wartości; kierunek może wrócić do początkowego kierunku cyklu. Timer.cancel zatrzymuje aktualizacje; nowy periodic kontynuuje bez nadrabiania i nie gwarantuje dokładnie 2 s. Dispose usuwa timer/controller. Pełna demonstracja Flutter 3.44.9 / Dart 3.12.2: analiza, host, build i iOS PASS; skrót nie był osobno uruchamiany.
Android / Compose
import androidx.compose.runtime.*
import androidx.compose.material3.Button
import androidx.compose.material3.Text
import androidx.compose.foundation.layout.Column
import kotlinx.coroutines.delay
import kotlinx.coroutines.isActive
@Composable fun PickupCount() {
var paused by remember { mutableStateOf(false) }
var count by remember { mutableStateOf(4) }
LaunchedEffect(paused) {
if (!paused) while (isActive) {
delay(2000)
count++
}
}
Column {
Text("Paczki w punkcie: $count")
Button(onClick = { paused = !paused }) {
Text(if (paused) "Wznów aktualizacje" else "Wstrzymaj aktualizacje")
}
}
}Zmiana klucza LaunchedEffect anuluje poprzednią coroutine; wyjście z kompozycji także ją anuluje. Odczyt pozostaje w stanie. Do osobnego ruchu użyj zatrzymywalnego animatora albo go usuń; samo rememberInfiniteTransition nie daje pauzy. Dokumentacja sprawdzona; kompilacja i Android niewykonane.
iOS / SwiftUI
import SwiftUI
struct PickupCount: View {
@State private var paused = false
@State private var count = 4
var body: some View {
VStack {
Text("Paczki w punkcie: \(count)")
Button(paused ? "Wznów aktualizacje" : "Wstrzymaj aktualizacje") {
paused.toggle()
}
}
.task(id: paused) {
guard !paused else { return }
while !Task.isCancelled {
do { try await Task.sleep(for: .seconds(2)) }
catch { return }
guard !Task.isCancelled else { return }
count += 1
}
}
}
}task(id:) zastępuje/anuluje zadanie przy zmianie pauzy i opuszczeniu widoku. Błąd anulowanego sleep kończy pętlę; API sleep wymaga iOS 16. TimelineView z pozycją od bieżącej daty może skoczyć po wznowieniu, więc kontynuacja potrzebuje utrzymanej fazy. Dokumentacja sprawdzona; ten fragment nie miał typecheck ani runtime. Flutter/iOS go nie potwierdza.
React Native
import React, { useEffect, useState } from 'react';
import { Button, Text, View } from 'react-native';
export function PickupCount() {
const [paused, setPaused] = useState(false);
const [count, setCount] = useState(4);
useEffect(() => {
if (paused) return;
const timer = setInterval(() => setCount((c) => c + 1), 2000);
return () => clearInterval(timer);
}, [paused]);
return (
<View>
<Text>Paczki w punkcie: {count}</Text>
<Button
title={paused ? 'Wznów aktualizacje' : 'Wstrzymaj aktualizacje'}
onPress={() => setPaused((p) => !p)}
/>
</View>
);
}Cleanup usuwa interwał przy zmianie pauzy i unmount. Dla ruchu Animated.Value.stopAnimation(callback) pozwala uzyskać pozycję i rozpocząć od niej nową animację. Zmiana napisu nie zatrzymuje Animated.loop. Dokumentacja sprawdzona; typecheck, build i runtime niewykonane.
Jak sprawdzić
- Zinwentaryzuj ruch i aktualizacje, źródło startu, równoległą treść oraz uzasadnienie niezbędności. Mierz ruch także po 5 s; nie stosuj tego progu do aktualizacji.
- Wstrzymaj samo źródło ruchu, obserwując dalsze aktualizacje. Potem wstrzymaj aktualizacje i użyj innej funkcji ekranu.
- Potwierdź trwałość obu pauz po odejściu od kontrolki. Wznów je osobno i sprawdź niezależne skutki.
- Dla braku kontroli potwierdź warunki i wyjątek; naturalny koniec po 90 s nie rozwiązuje warunku ruchu ponad 5 s.
- Dla świadomego startu obserwuj stan przed przyciskiem, uruchom, potem sprawdź reset. W docelowym audycie zbadaj dostępność kontrolek właściwymi wejściami i asystą.
Weryfikacja i ograniczenia
Historyczne wykonanie 2026-10-02: Flutter 3.44.9 / Dart 3.12.2, Xcode 27.0 / SDK Simulator 27.0 i iPhone 17 Simulator / iOS 26.5. Próby dotykowe były wykonane w zainstalowanym buildzie.
| Sprawdzenie | Wynik i granica |
|---|---|
| Analiza, host, build iOS | PASS; 17 testów hostowych, build Xcode 7,5 s. Host używa wirtualnego czasu. |
| XCTest | PASS, 2 testy, 0 failures, 93,078 s. |
| Automatyczne good/bad | Zmiany po co najmniej 6,306668 / 6,310020 s. Bad odtwarza FAIL 2.2.2; test odtworzenia ma PASS. |
| Pauza samego ruchu | Co najmniej 3,008409 s stałej pozycji przy rosnącym liczniku. |
| Obie pauzy | Co najmniej 7,005268 s; x=70,133316 pt, odczyt 12 i 16 paczek, adres ujawniony. Wznowienia niezależne. |
| Control | Co najmniej 7,006130 s bez zmian, x=16 pt i odczyt 0; po starcie obie zmiany działają. |
| Materiały | 4 PNG, 17 próbek, 9 wejść i 4 drzewa; surowy film i eksport. AI obejrzała kadry i sekwencje klatek. |
| Inne drogi, asysta i człowiek | Stop/ukrycie/częstotliwość, transmisja, fizyczny iPhone, VoiceOver, klawiatura/FKA i pozostałe frameworki niewykonane. |
Dolne granice czasu pochodzą z różnicy początku i końca osobnych odczytów na zegarze XCTest, bez mieszania z timerem Fluttera. Odczyt stanu, frame i label nie jest atomowy: podczas ruchu licznik zdążył zmienić się między nimi; po pauzie teksty są zgodne. UTC nie mierzy ekspozycji PNG. Ostateczne wyniki dotyczą kodu po poprawkach hosta, Semantics.enabled i drivera.
Snapshot lub kilka pozycji nie dowodzą ciągłości wszystkich klatek, źródła startu i niezbędności. Live region nie zatrzymuje zmian. Instrumentację, etykiety good/bad/control i oczekiwania należy wyłączyć z wejścia niezależnego walidatora; takiego klasyfikatora nie uruchomiono. Brak ruchu w jednym kadrze nie oznacza spełnienia wymagania.
Jak sprawdza Clearship
Metoda z 2026-10-08, z pomiarem iOS 2026-10-09, analizuje ruch w klatkach około sześciu sekund czekania bez akcji. Szuka automatycznego ruchu obok treści i kontroli rozpoznanej z etykiety. Android spełnił próg kontrolny: 6/6 usterek, 0 fałszywych alarmów na 44 poprawnych ekranach. iOS ma 5/6 i 0/44, więc pozostaje poniżej progu i wymaga człowieka.
Analizator nie sprawdza skutku pauzy ani gałęzi automatycznych aktualizacji. Rozpoznana kontrolka, czas przy progu, brak równoległej treści, nagrania lub dekodera pozostają nierozstrzygnięte. Ruch po akcji, później niż okno i poza trasą nie jest badany; ocena niezbędności potrzebuje kontekstu. Dekoder jest dostępny w ponownej analizie na stacji, ale obecne hosty i usługa analizy mogą zwracać brak dekodera. Wyniki demonstracji tego artykułu są odrębne od pomiarów produktu.