2.5.7Poziom AA

Przeciąganie

Dragging Movements

Funkcję przeciągania udostępnij także jednym wskaźnikiem bez przeciągania, poza wyjątkami niezbędności i niezmienionej funkcji platformy.

Komu pomaga
Ograniczenia ruchowe
Zastosowanie
WWWAplikacje mobilneAplikacje desktopoweDokumenty cyfroweInne urządzenia

Warunki i wyjątki opisano w artykule.

Wersja
WCAG 2.2, wprowadzone w 2.2
Zasada / wytyczna
Funkcjonalność / 2.5
Stan researchu
Draft AI. Bez przeglądu człowieka.
Redakcja artykułu
· wersja robocza
Na tej stronie

Co oznacza to kryterium

Przytrzymywanie elementu podczas precyzyjnego ruchu może utrudniać zmianę kolejności. Jeśli przeciągnięcie przesuwa zadanie, równoważny wynik musi być osiągalny jednym wskaźnikiem bez przeciągania, na przykład przyciskami „W górę” i „W dół”. Kilka stuknięć jest dopuszczalne. Wyjątki dotyczą niezbędnego przeciągania oraz niezmienionej funkcji dostarczanej przez właściwą warstwę platformy.

ID / etykieta Bariera i uzasadnienie
motor — Ograniczenia ruchowe Utrzymanie nacisku podczas precyzyjnego ruchu może być trudne przy ograniczonej sprawności dłoni, drżeniu, sterowaniu głową, wzrokiem lub emulowaną myszą. Oddzielne aktywacje pozwalają zmienić pozycję bez ciągłego chwytu.

Przykłady błędów i poprawek

Syntetyczne zadania Atlas → Brzoza → Cedr, ten sam cel i ta sama funkcja zmiany kolejności. Demonstracja Fluttera działa na iOS, a przykład webowy uzupełnia obserwację DOM PointerEvent i przewijania platformowego. Cykl wariantów i reset są sterowaniem badacza: zmiana wariantu resetuje dane i nie jest alternatywą zmiany kolejności w ocenianym wariancie. Bad ocenia się w granicach tej celowo błędnej demonstracji, nie jako audyt całego researchowego hosta.

Scenariusz Problem → poprawka → zakres dowodu
Lista / good To samo przeciąganie z widocznymi przyciskami W górę / W dół dla każdego zadania. Każdy krok i odwrócenie używa wspólnej operacji przeniesienia. Jedno stuknięcie przesuwa Atlas o jedną pozycję; dwa na koniec.
Lista / bad Rzeczywisty drag zmienia kolejność, zwykły tap wiersza nie zmienia jej i nie ma przycisków ani menu przesuwania. Osoba niemogąca utrzymać nacisku nie wykona funkcji. Poprawka to alternatywa z good. Drag pozostaje włączony.
Lista / control Drag oraz ArrowDown, które zamienia pierwsze dwa zadania. Klawiatura potwierdza wąską operację, ale nie usuwa braku drogi wskaźnikowej. Nie jest to wynik zgodności całego 2.1.1.
Przewijanie UA / WWW Osobny obszar overflow:auto bez autorskich handlerów przewijania. Scroll zmienia pozycję widoku, nie kolejność zadań; kontrola wyjaśnia granicę warstw.
Inne scenariusze edukacyjne Kanban: stuknięcie zadania i menu kolumny; mapa: przyciski kierunków; suwak: tor lub pole liczbowe; zaznaczenie prostokąta: dwa stuknięcia narożników. Badać równoważny osiągalny wynik i wymagania innych kryteriów. Te scenariusze poza listą NOT-RUN.

Demonstrację wykonano interakcyjnie. Screenshoty pokazują stany, a otrzymane wejścia i odczyty renderera/DOM potwierdzają przebieg; screenshot sam nie dowodzi działającego drag. Nie nagrywano filmu ani audio, nie generowano obrazów, nie wykonywano pomiaru kontrastu. To kryterium nie wymaga kadru z widoczną klawiaturą.

Good przed zmianą: Atlas, Brzoza, Cedr i przyciski W górę oraz W dół.

Końcowa demonstracja iOS z 2026-10-04 pokazuje początkową kolejność i alternatywę przy każdym zadaniu. Kadr nie dowodzi skuteczności przeciągania.

Good po W dół Atlas: Brzoza, Atlas, Cedr.

Jedno stuknięcie W dół Atlas daje tę samą kolejność co przeciągnięcie o jedną pozycję. Równoważne wejścia opisuje przebieg; screenshot pokazuje wynik jednego z nich.

Bad po przeciągnięciu Atlas: Brzoza, Atlas, Cedr, bez przycisków przesuwania.

Bad zachowuje działające przeciąganie i nie ma zwykłej drogi stuknięciami w obrębie tej listy. Ruch oraz brak skutku tap potwierdza zapis wejść i renderera, a nie sam kadr.

Lista webowa po kliknięciu W dół Atlas: Brzoza, Atlas, Cedr.

Przeglądarka Codex na macOS, 1280 × 720 CSS px, 2026-10-04. Klik przycisku osiągnął ten sam wynik co drag; to osobna próba DOM, bez natywnego desktopu lub urządzenia dotykowego.

Kiedy obowiązuje i gdzie są wyjątki

Przeciąganie angażuje element przez naciśnięcie; element albo reprezentacja jego pozycji podąża za wskaźnikiem do zwolnienia. Sam ruch palca lub dowolny swipe nie dowodzi przeciągania. Należy zbadać funkcję i zachowanie podczas przytrzymania, nie nazwę callbacku.

Wymagana jest równoważna funkcjonalność — proces i wynik — przy jednym wskaźniku bez przeciągania. Może to być ten sam komponent, osobne kontrolki, wybór zadania i pozycji docelowej albo pole wartości obsługiwane ekranową klawiaturą. Kilka zwykłych stuknięć jest dopuszczalne. Kontrolka wyłącznie klawiaturowa nie wystarcza; widoczne przyciski muszą reagować również na stuknięcia. Alternatywa nie może sprowadzać się wyłącznie do gestu zależnego od ścieżki, co wymaga osobnej oceny 2.5.1.

Niezbędność jest ścisła: usunięcie przeciągania zasadniczo zmieniałoby informację lub funkcję, której nie da się zachować inną zgodną drogą. Wygoda, preferencja projektanta, mapa, plansza lub gra jako kategoria nie tworzą ogólnego wyjątku. Dla zadania na liście można zachować wynik przyciskami, więc demonstracja nie korzysta z wyjątku. Twierdzenie o niezbędności wymaga uzasadnienia konkretnej aktywności.

Niezmienione przewijanie dokumentu, scrollbar, overflow:auto i standardowe odświeżanie dostarczane przez UA pozostają poza autorskim sterowaniem treści. Gdy autor blokuje taki mechanizm i wdraża własny, bada się jego funkcję. Samo użycie biblioteki lub kontrolki frameworka nie czyni autorskiej zmiany kolejności niezmienioną funkcją OS. Poza WWW stosujemy rozdzielenie warstw z WCAG2ICT.

Understanding, techniki i błędy są pomocnicze, a norma określa wymaganie. G219 opisuje równoważną aktywację jednym lub kilkoma stuknięciami. Jej test pyta o funkcję drag oraz drogę bez drag; niewykorzystanie G219 nie dowodzi automatycznie naruszenia, jeśli działa inna równoważna metoda. F108 dotyczy działającej funkcji drag bez takiej alternatywy; własny bad odtwarza ten warunek. Nie mamy danych o częstości błędu. W sprawdzonym katalogu nie ma reguły ACT dla 2.5.7; brak reguły nie jest wynikiem PASS. ACT jest informacyjne i ma określone pokrycie, a poniższy checker jest kontrolą własnej demonstracji.

2.5.1 bada gesty wielopunktowe i zależne od ścieżki; jedna interakcja może wymagać obu ocen. 2.5.2 bada moment wykonania i możliwość anulowania, a nie samą obecność alternatywy przeciągania. 2.1.1 ocenia dostęp przez klawiaturę osobno.

Platformy

Wszystkie wiersze zweryfikowano merytorycznie przez AI 2026-10-04. „Dotyczy warunkowo” oznacza warunek funkcjonalny, a nie brak testu. WCAG2ICT jest wskazówką interpretacyjną; nie ustanawia osobnej normy zgodności. Ta klasyfikacja nie rozstrzyga obowiązków prawnych ani mapowania do EN 301 549.

Środowisko Podstawa / ID Stan, zakres i adaptacja Uzasadnienie / wykonanie
web — WWW WCAG 2.2 Recommendation 2024-12-12 / 2.5.7 Dotyczy warunkowo: treść autora interpretuje przeciąganie. Bez zmiany wymagania; wyjątek niezmienionej funkcji UA. Także WWW w telefonie. Wykonano minimalny HTML w przeglądarce Codex/macOS.
mobile — Aplikacje mobilne WCAG2ICT 2.2 Group Note 2025-12-11 / 2.5.7 Dotyczy warunkowo: aplikacja interpretuje przeciąganie. UA rozszerza się na UA lub inne oprogramowanie platformy; notę dostosowuje się do oprogramowania poza WWW i warstwy podstawowej. Warstwa odpowiada za własne wejścia. Wykonano Flutter/Cupertino na iOS Simulator; Android i urządzenie fizyczne NOT-RUN.
desktop — Aplikacje desktopowe Ta sama Group Note / 2.5.7 Dotyczy warunkowo, z tą samą adaptacją oprogramowania. Przeciąganie w autorskim edytorze/listach wymaga równoważnej drogi wskaźnikowej. Natywne aplikacje Windows/macOS/Linux NOT-RUN. Przeglądarka na Macu pozostaje web.
document — Dokumenty cyfrowe Ta sama Group Note / 2.5.7 Dotyczy warunkowo: treść dokumentu interpretuje przeciąganie; „treść webowa” w nocie staje się „treścią”. UA lub inne oprogramowanie platformy zastępuje UA w wymaganiu. Możliwy interaktywny prototyp. Zwykły statyczny PDF bez autorskiej funkcji przeciągania nie uruchamia tego warunku; przeciąganie paska czytnika należy do czytnika. Dokument NOT-RUN.
other — Inne urządzenia: dotykowy kiosk z listą WCAG dla części webowej; wskazana Group Note dla oprogramowania poza WWW / 2.5.7 Dotyczy warunkowo: własne przeciąganie obsługiwane wskaźnikiem. Dla natywnej części adaptacja jak software. Ocena treści/oprogramowania nie potwierdza wymagań sprzętu ani zamkniętej funkcjonalności. Kiosk i telewizor NOT-RUN. Nie uogólniono na każde inne urządzenie.

W hybrydzie bada się część webową i natywną osobno. Brak przeciągania w danym scenariuszu oznacza brak zastosowania do tej funkcji, a nie wyłączenie całej platformy. WCAG2ICT przypisuje także platformom odpowiedzialność za własne akcje wskaźnika, bez przenoszenia jej na aplikację za działania warstwy podstawowej.

Rozwiązania w technologiach

Każdy przycisk trzeba dołączyć do istniejącej funkcji drag, zachowując wspólną logikę wyniku, dane i ograniczenia. Poniższe fragmenty pokazują warstwę alternatywy; nie udają kompletnego drag w czterech nowych aplikacjach. Dla każdego zadania należy udostępnić ruch w obie strony do każdej dozwolonej pozycji; na brzegach wyłączyć tylko niemożliwy kierunek.

Technologia Dokumentacja API 2026-10-04 Kompilacja / działanie
flutter — Dart/Flutter GestureDetector, onPanUpdate, Listener, Transform.translate, CupertinoButton; lokalne SDK i oficjalna dokumentacja API Pełna demonstracja Flutter 3.44.9 / Dart 3.12.2: analiza/build/iOS niżej. Wyciąg edukacyjny niekompilowany oddzielnie.
swiftui — SwiftUI Oficjalne Button i zarządzanie @State, sprawdzone w oficjalnej dokumentacji Fragment: NOT-RUN typecheck, kompilacja i aplikacja. Build Flutter nie potwierdza SwiftUI.
jetpack-compose — Kotlin/Compose Oficjalne Button/onClick/enabled i stan w Compose Fragment: NOT-RUN kompilacja/runtime. Bez Androida.
react-native — TypeScript/RN Oficjalne Pressable/onPress/disabled; oficjalna dokumentacja dostępności Fragment: NOT-RUN typecheck/build/runtime. Bez deklaracji wersji użytej do uruchomienia.
HTML/CSS/JavaScript HTML button, Pointer Events, overflow; oficjalna norma i DOM Rzeczywisty WWW/CUA PASS w opisanym zakresie, bez niezależnego typechecka. Wersji silnika nie odczytano.

Flutter / Dart

W metodzie build istniejącego StatefulWidget z listą order i callbackiem move(id,destination,input):

import 'package:flutter/cupertino.dart';
// id: bieżące zadanie; index: order.indexOf(id).
CupertinoButton(
  onPressed: index < order.length - 1
      ? () => move(id, index + 1, 'tap-down') : null,
  child: Text('W dół $id'),
)

Pełny wykonany kod zawiera obie strony, bezpośredni drag z przesuwanym rendererem, stabilne klucze kart, cykl i reset. Drag i przyciski wywołują tę samą operację przeniesienia; sama dostępna akcja semantyczna bez działającego zwykłego tap nie wystarcza.

iOS / SwiftUI

import SwiftUI
struct PriorityList: View {
    @State private var items = ["Atlas", "Brzoza", "Cedr"]
    func move(_ id: String, _ delta: Int) {
        guard let i = items.firstIndex(of: id) else { return }
        let target = i + delta
        guard items.indices.contains(target) else { return }
        items.remove(at: i); items.insert(id, at: target)
    }
    var body: some View {
        VStack {
            ForEach(items, id: \.self) { id in
                let i = items.firstIndex(of: id)!
                HStack {
                    Text(id)
                    Button("W górę \(id)") { move(id, -1) }.disabled(i == 0)
                    Button("W dół \(id)") { move(id, 1) }.disabled(i == items.count - 1)
                }
            }
        }
    }
}

Istniejący drop powinien wywoływać tę samą operację modelu. Nie zakładaj, że samo .onMove lub EditMode zapewnia równoważną obsługę stuknięciami w danej konfiguracji. Fragment nie dodaje drag i pozostaje edukacyjny, NOT-RUN.

Android / Jetpack Compose

import androidx.compose.runtime.*
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.material3.Button
import androidx.compose.material3.Text
@Composable
fun PriorityList() {
    var items by remember { mutableStateOf(listOf("Atlas", "Brzoza", "Cedr")) }
    fun move(id: String, delta: Int) {
        val i = items.indexOf(id); val target = i + delta
        if (i < 0 || target !in items.indices) return
        items = items.toMutableList().apply { removeAt(i); add(target, id) }
    }
    Column {
        items.forEachIndexed { i, id ->
            key(id) {
                Row {
                    Text(id)
                    Button(onClick = { move(id, -1) }, enabled = i > 0) { Text("W górę $id") }
                    Button(onClick = { move(id, 1) }, enabled = i < items.lastIndex) { Text("W dół $id") }
                }
            }
        }
    }
}

Callback istniejącej implementacji drag powinien współdzielić model, a akcje dostępności nie zastępują zwykłego onClick. Fragment NOT-RUN; nie zbudowano Androida ani osobnej aplikacji.

React Native

import React, { useState } from 'react';
import { View, Text, Pressable } from 'react-native';
export function PriorityList() {
  const [items, setItems] = useState(['Atlas', 'Brzoza', 'Cedr']);
  const move = (id: string, delta: number) =>
    setItems((old) => {
      const i = old.indexOf(id),
        target = i + delta;
      if (i < 0 || target < 0 || target >= old.length) return old;
      const next = [...old];
      next.splice(i, 1);
      next.splice(target, 0, id);
      return next;
    });
  return (
    <View>
      {items.map((id, i) => (
        <View key={id}>
          <Text>{id}</Text>
          {([-1, 1] as const).map((delta) => {
            const disabled = i + delta < 0 || i + delta >= items.length;
            return (
              <Pressable
                key={delta}
                accessibilityRole="button"
                accessibilityState={{ disabled }}
                disabled={disabled}
                onPress={() => move(id, delta)}
              >
                <Text>
                  {delta < 0 ? 'W górę' : 'W dół'} {id}
                </Text>
              </Pressable>
            );
          })}
        </View>
      ))}
    </View>
  );
}

Włączyć do istniejącego ekranu i modelu drop, zachowując wystarczającą przestrzeń dla czytelnych celów. accessibilityActions i obsługa klawiatury osobno nie zastąpią onPress. Fragment NOT-RUN.

HTML / CSS

<button type="button" id="move-down">W dół Atlas</button>
<script>
  // W kontekście istniejącego modelu listy i wspólnego move(id,to,input).
  document.querySelector('#move-down').addEventListener('click', () => {
    const i = order.indexOf('Atlas');
    if (i < order.length - 1) move('Atlas', i + 1, 'tap-down');
  });
</script>

Wykonany WWW generuje oba przyciski dla wszystkich elementów. CSS touch-action:none ogranicza się do autorskich kart; overflow:auto pozostaje niezmienionym mechanizmem UA w osobnej kontroli. Custom PointerEvent przytrzymuje kartę, przesuwa jej transform i na up zmienia kolejność. Nie użyto dispatchEvent, setterów listy z narzędzia ani callbacku zwracającego z góry ocenę zgodności.

Jak sprawdzić

  1. Zidentyfikuj każdą funkcję przeciągania. Ustal, co angażuje down i czy reprezentacja pozycji podąża za wskaźnikiem do up. Zapisz wynik i konkretne dane.
  2. Zbadaj, czy autor implementuje tę funkcję; oddziel standardowe sterowanie UA/OS. Nie wnioskuj z samego frameworka.
  3. Od tego samego stanu początkowego wykonaj równoważny wynik jednym wskaźnikiem bez przytrzymywanego ruchu, w razie potrzeby wieloma aktywacjami. Sprawdź każdy dozwolony kierunek/pozycję i rezultat, a nie tylko obecność przycisku.
  4. Dla wyjątku zapisz ścisłe uzasadnienie. Brak alternatywy bez uzasadnionego wyjątku jest kandydatem na F108.
  5. Klawiaturę, anulowanie i gesty zależne od ścieżki oceń osobno. Nie traktuj ich testu jako spełnienia 2.5.7.

Własne wykonanie startuje z /2-5-7/unknown/bad: fallback daje good. Good drag Atlas o jedną pozycję → reset → zwykły tap W dół Atlas; oba wyniki Brzoza/Atlas/Cedr. Dwa tap → reset → drag na koniec; oba wyniki Brzoza/Cedr/Atlas. Dwa tap W górę wracają do początku. Cykl przechodzi do bad: tap wiersza nie zmienia kolejności, drag zmienia. Control ma działającą ArrowDown i drag, bez alternatywy tap. Cykl i reset przywracają good oraz początkową kolejność. WWW odtwarza tę parę, pełną pozycję końcową, roundtrip, cykl/reset/fallback i osobny scroll UA.

Historyczne wyniki z 2026-10-04

Wykonano 2026-10-04 na dedykowanym iPhone 17 Simulator, iOS 26.5, 402×874 pt / DPR 3 / PNG 1206×2622, jasny wygląd i rozmiar tekstu large. Odczyt ustawień po teście nie oznacza ich zmiany. Flutter 3.44.9, Dart 3.12.2, Xcode 27.0 (27A266a). WWW: przeglądarka Codex na macOS, 1280×720/DPR 1. Nie ustalono wersji silnika przeglądarki. Pochodzenie i hashe zachowano w materiale źródłowym.

Wykonanie Wynik i rzeczywisty zakres
Analiza / regresja / build końcowy Analiza PASS; 67 istniejących testów hostowych PASS; build iOS PASS. Hostowe testy obejmują regresję wcześniejszych scenariuszy; nie zastępują nowego XCTest.
Pierwszy XCTest v1 FAIL, exit65, 12,715 s testu / 23,937 s procesu; 2 stany, 2 wejścia, 2 PNG. Drag przesuwał Brzozę zamiast Atlas przez brak stabilnego klucza przy zmianie kolejności dzieci Stack. Zachowano surowy log, drzewa, media, projekt drivera i manifesty. Poprawiono ValueKey(id); nie traktowano FAIL jako dowodu bad.
Końcowy XCTest v2 PASS, 1 test / 0 błędów, 71,186 s testu / 78,214 s procesu. Świeży bundle drivera, pusty build-marker, własny xctestrun i marker runtime; zbudowany i zainstalowany app/runner identyczny przed i po wykonaniu. 15 stanów/drzew, 18 wejść, 9 surowych PNG; końcowy stan zawiera 83 otrzymane zdarzenia wskaźnika i 51 odczytów renderera podczas drag. Po PASS nie powtarzano UI.
Równoważność / iOS Drag o jedną pozycję = zwykły tap W dół Atlas; drag na koniec = dwa zwykłe tap. Dwa tap W górę odwracają operację. Działające drag good/bad/control, bezskuteczny tap bad, prawdziwy KeyDown/Up ArrowDown control bez nowych zdarzeń wskaźnika, cykl/reset/fallback.
WWW 18 odczytów DOM/AX i 17 wejść, 8 surowych JPEG. Te same równoważne wyniki, roundtrip, bad click/drag, control ArrowDown, cykl/reset/fallback. Otrzymane PointerEvents mają isTrusted=true; przy drag ruch z wciśniętym przyciskiem i transform rzeczywistego DOM. Scroll UA 0→184 przy clientHeight 134 / scrollHeight 318 nie zmienił kolejności.
Kontrola dowodów Checker i wynik kontrolują własną demonstrację, surowe payloady, geometrię, równoważność, SHA256, zachowanie 1431 wcześniejszych plików i linki. Tryb --readonly niczego nie zapisuje. Nie jest to zaślepiony audyt zgodności.
Oględziny / cleanup AI obejrzał 19 rzeczywistych obrazów, również oba historyczne; bez pustych kadrów i splash. Runner i serwer zakończone, działająca karta WWW zamknięta. Zapis cleanup ujawnia, że zamknięcia pierwszej karty błędu połączenia nie potwierdzono przez blokadę narzędzi.

Odczyty Fluttera są zbierane po klatce. Renderer odpowiada zapisanej translacji, ale kilka callbacków może współdzielić nowszą translację: współrzędna pojedynczego PointerMove i translacja danego rekordu mogą się różnić. Checker nie wymusza fałszywej synchronizacji każdego rekordu; porównuje otrzymane down/move/up, przesunięcie renderera i wynik operacji. WWW zapisuje transform i DOM synchronicznie podczas PointerMove. To przebieg pomiarowy, bez filmu i bez wnioskowania o jakości animacji.

Problemy przygotowania i ich rozwiązania zachowano w historii prób. Obejmują odmowę zapisu cache SDK przed zwykłą eskalacją, kartę WWW utworzoną przed startem serwera, niedostępny callback odczytu i brak dopasowania pomocniczej zamiany tekstu. Nie wykonano testu UI na pośrednim buildzie; część jego logów przygotowania została nadpisana, co zapisano jawnie.

Weryfikacja i ograniczenia

Metoda Co ustala / granica
Źródło + deterministyczny checker demonstracji Sprawdza rzeczywiste logi, wejścia, zmiany modelu, renderer, równoważność, integralność i obecność bad. Zna własny scenariusz, nie jest ACT ani niezależnym walidatorem.
Drzewo AX lub DOM Potwierdza dostępne kontrolki w tych stanach; sama etykieta albo rola nie dowodzi skutecznego tap, równoważności ani niezbędności.
Screenshot Pokazuje przyciski i kolejność, nie dowodzi dynamicznego drag ani sposobu wykonania. Przebieg i renderer są niezbędnym uzupełnieniem.
Ocena AI Interpretacja kontekstu, wyjątków i oględziny mediów; wymaga przeglądu człowieka. Brak znalezienia usterki nie jest PASS.
Zaślepiony walidator NOT-RUN. Przed jego badaniem oddzielić oczekiwane etykiety/test/checker i nazwy wariantów od wejścia. Dzienniki researchu nie są gotowym niezależnym benchmarkiem.
AT / physical / ustawienia OS NOT-RUN VoiceOver, Voice Control, eye tracking, przełączniki, fizyczny iPhone/dotyk/mysz, FKA, zmiana text size, dark mode. Native AX nie jest VoiceOver; CUA/XCTest to automatyzowane zwykłe wejścia, nie test z osobą.

Równoważność wymaga oceny funkcji, nie tylko podobnych współrzędnych. Pozytywny wynik jednej funkcji nie pokrywa pozostałych drag w aplikacji; wyczerpujące wyszukanie alternatyw i wyjątki wymagają szerszego kontekstu. Scenariusz kontrolny dowodzi jedynie zamiany dwóch pierwszych zadań klawiszem; nie deklaruje kompletnej klawiaturowej obsługi listy.

Jak sprawdza Clearship

Clearship szuka funkcji przeciągania w próbach suwaka oraz instrukcjach widocznych na ekranie. Kandydatów na drogę bez przeciągania rozpoznaje z nazw przycisków, zdań instrukcji i zapisanych zmian stanu po wejściu. Klawiatury oraz samych akcji dostępności nie zalicza jako zwykłej drogi wskaźnikowej.

Metoda deterministyczna pointer-gestures-1 pozostaje poniżej progu na Androidzie i iOS według bieżącego katalogu oraz pomiarów 8 października 2026 r. Dla 2.5.7 wynik wymaga człowieka; pusta lista kandydatów nie potwierdza spełnienia kryterium. Etykieta „Przenieś niżej” nie dowodzi działania ani równoważnego wyniku.

Nie potwierdzamy przeciągnięcia listy bez instrukcji, stuknięcia w tor suwaka ani tego, że wiersz podąża za palcem podczas przesunięcia. Niezbędność, rozdzielenie warstw platformy, inne funkcje i osobna treść webowa wymagają dalszej oceny. Pomiar iOS pochodzi z pakietów sprzed zmiany wyjścia wskaźnika na 100 pt; jego aktywacji kontrolki nie można przenosić na nowe pakiety.

Powiązane kryteria