GH GambleHub

Wskaźniki postępu i stanu

1) Zasady

1. Natychmiastowa odpowiedź (≤ 100 ms). Każde działanie jest natychmiast potwierdzone wizualnie: naciśnięcie „zajętego ”/szkieletu/mikroanimacji →.
2. Uczciwość i przewidywalność. Procenty odzwierciedlają rzeczywisty postęp, a nie „wieczne 99%”. Jeżeli ocena nie jest możliwa, należy użyć nieokreślonego wariantu i wyjaśnienia.
3. Kontekst obok aktywności. Wskaźnik jest tam, gdzie użytkownik szuka/działa (przycisk, karta, blok), nie w dalekim rogu.
4. Kradzież po sukcesie. Sukces jest krótki czek/zanik i to wszystko. Błąd - zrozumiałe wyjaśnienie i bezpieczne powtarzanie.
5. Domyślna dostępność. 'role =' progressbar ',' aria-valuenow ', regiony żywe, kontrast ≥ AA.

2) Rodzaje wskaźników i kiedy je stosować

Postęp liniowy (określić/nieokreślony). Załadunek/import/eksport, kroki z jasnym zakresem.
Postęp kołowy (zwykle nieokreślony). Krótkie lokalne operacje w zwartych miejscach.
Krok po kroku. Etapy sekwencyjne („Krok 2 z 4”), KYC, procesy główne.
Szkielet (wtyczki szkieletowe). Zastąpienie struktury treści zamiast spinnerów; unikać „shimmer” dla użytkowników z „Preferers-reduced-motion”.
Odznaki stanu (sukces/ostrzeżenie/niebezpieczeństwo/informacje). Stan obiektu (In Process, Rejected, Ready).
Baner/status toast. Globalne wydarzenia: offline, awaria serwera, synchronizacja kolejki.
Ładowarka wewnętrzna (przycisk/linia). Operacje lokalne: "Zapisz"..., "Wyślij'....

3) Definitywny a niepewny postęp

Określić: ilość pracy jest znana → pokazujemy %/etapy.
Nieokreślony: nieznana objętość → „Przetwarzanie w toku”... + kontekst („Zwykle do 1-2 minut”).
Stan przejścia - Możesz zacząć od nieokreślonego → przejdź do określenia, kiedy pojawi się ocena.
ETA ostrożnie: pokaż zakres („~ 30-60 sekund”) i unikaj „obietnic”.

4) Umieszczenie i wzory

Lokalnie do działania: przycisk „aria-busy”, spinner w wierszu tabeli, postęp karty.
Powyżej bloku/listy: pasek liniowy poniżej nagłówka sekcji podczas operacji serii.
Globalny: najwyższy subtelny postęp (zmiana trasy), banery systemowe.
Lepki panel (mobilny): potwierdzenie/postęp w CTA w dolnym doku.

5) Dostępność (A11y)

Postępy:
html
<div role = "progressbar" aria-valuemin =" 0" aria-valuemax =" 100" aria-valuenow =" 42" aria-label = "Load Report "> </div>

Indeterminate: set 'role = „progressbar”' without 'aria-valuenow', add explanatory text to 'role =' status '.
Regiony żywe: 'aria-live =' grzeczny 'dla regularnych aktualizacji,' asertywny 'tylko dla krytycznych.
"aria-busy =" true "na kontenerze, który jest tymczasowo blokowany przez działania.
Focus nie „skakać”: podczas zmiany sceny, przenieść ostrość do nagłówka kroku kroku.

6) Kopiowanie i semantyka wizualna

Krótko i w przypadku: „Załadunek w toku”..., „Przetwarzanie płatności”....
Dodaj "co dalej": "Zrobione. Odświeżmy stronę automatycznie.
Kolory: zielony - sukces, pomarańczowy - ostrzeżenie/uwaga, czerwony - błąd. Kolor i jedyne medium o znaczeniu: podaj ikonę/tekst.

7) Aktualizacje i pullbacks

Optymistycznie: natychmiast zmieniamy interfejs użytkownika (na przykład znak „Ulubione”) i po cichu potwierdzamy go za pomocą serwera.
W przypadku błędu - miękki rollback + wyjaśnienie i 'Retry'.
Operacje krytyczne (stawka/płatność): opcjonalnie „optymistyczne” (fix „Wysłane → Czekanie na potwierdzenie”...), ale bez zmiany stanu pieniężnego przed potwierdzeniem.

8) Kolejki i zadania podstawowe

Pokaż kolejkę: 'n' zadania w przetwarzaniu, poszczególne karty z postępem.
Wstrzymaj/anuluj długie operacje, jeśli to możliwe.
Przetwarzanie tła: „W tle” odznaka, toast po zakończeniu, „Historia zadań” sekcja.

9) Wydajność i terminy

Pierwsza reakcja ≤ 100ms: użyć szkieletu/inline-busy zamiast pustki.
Animacje: 120-180 ms (in), 80-140 ms (out), tylko „transformacja/nieprzezroczystość”.
Długie procesy: aktualizacja postępu nie więcej niż 10-15 razy/s; Zmiany grupowe.

10) Snippety

Lokalny postęp przy przycisku

html
<button id="export" class="btn" aria-busy="false">Экспорт CSV</button>
<script>
const btn = document. getElementById('export');
btn. addEventListener('click', async () => {
btn. setAttribute('aria-busy','true'); btn. disabled = true;
try {
const r = await fetch('/api/export', { method:'POST' });
if(!r.ok) throw new Error();
//show toast "Export has begun. We will notify upon readiness"
} catch {
//toast with cause and Retry
} finally {
btn. disabled = false; btn. setAttribute('aria-busy','false');
}
});
</script>

Określenie liniowe

html
<div class="progress">
<div class="bar" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0"></div>
</div>
<style>
.progress{height:4px; background:var(--bg-muted); border-radius:999px; overflow:hidden}
.progress. bar{height:100%;width:0%;background:var(--accent); transition:width. 16s}
</style>
<script>
const bar = document. querySelector('.progress. bar');
let n=0; const t=setInterval(()=>{ n=Math. min(100, n+5); bar. style. width=n+'%'; bar. setAttribute('aria-valuenow',n); if(n===100) clearInterval(t); },160);
</script>

Stepper

html
<nav aria-label = "Progress">
<ol class="steps">
<li class = "done "> <span> 1 </span> Data </li>
<li class = "current" aria-current = "step "> <span> 2 </span> Documents </li>
<li> <span> 3 </span> Confirmation </li>
</ol>
</nav>

11) Szkielet poprawny

Użyj formy przyszłych treści (karty/linie), bez niekończącego się migotania (lub wyłączyć z „Preferers-reduced-motion”).
Termin: jeśli załadunek> 300-500 ms, szkielet jest uzasadniony; przy niższych opóźnieniach „mikro-blaknięcie” wystarczy.

12) Odznaki stanu (stan obiektu)

Przykładami są: Projekt, Proces, Oczekujące potwierdzenie, Gotowe, Odrzucone.

Krótki tekst, stabilne kolory ikony/tła, kontrast ≥ AA.
Ikona 'aria-ukryta =' true '+ etykieta tekstowa (dla SR).
Kliknij - ujawnij szczegóły lub otwórz „Historia”.

13) Specyfika iGaming

Stawka:
  • Naciśnięcie CTA → „Wysłany”..., z opóźnieniem> 3 sekund - „Czekając na potwierdzenie”... (nieokreślone).
  • Sukces - „Bet accepted” + check; błąd - uczciwe wyjaśnienie („okres rynkowy zamknięty/stosunek zmieniony”) i bezpieczne Retry.
Wpłata/wypłata:
  • Określić według etapów: „Sprawdź metodę → Wyślij → Potwierdź PSP”.
  • Dla wyjścia - W odznaki procesowej, ekran stanu w profilu, zakres ETA; nacisnąć na zakończenie.
Turnieje/liderki:
  • Krok rejestracyjny (kroki), postęp w przyznawaniu (N/punkty), odznaka statusu „Uczestniczący”.
  • Aktualizacja w czasie rzeczywistym - schludny, bez mrugnięć, z 'aria-live =' grzeczny '.
KYC:
  • Stepper + odznaka "Under Review. "Pokaż, co jest już akceptowane (kleszcz) i co zostało.

14) Kolory, kontrast i tekst

Sukces/Info/Ostrzeżenie/Niebezpieczeństwo - cztery stabilne dźwięki w systemie projektowania.
Kontrast tekstu z tłem odznaki ≥ AA.
Nie używaj tego samego koloru do „w trakcie” i „ostrzeżenia”.

15) Metryka

Czas do pierwszego sprzężenia zwrotnego (TTFF): kliknij, aby uzyskać pierwszą odpowiedź wizualną.
Zakończenie Czas na operacje i spadek/abort szybkość dla długich zadań.
Powtórny wskaźnik sukcesu dla operacji postępu.
% optymistów, którzy zakończyli pomyślnie (i udział w rolkach).
Widoczny szkielet/spinner czasu (cel: jak najmniej).

16) Anty-wzory

Cichy przycisk (bez zajętego/spinnera)> 100 ms.
Nieskończone spinery bez wyjaśnienia lub alternatywy.
Fałszywy procent/99% zawieszony suwak.
Zresetuje zawartość w przypadku awarii i nie można jej ponownie wypróbować.
Tylko kolor bez tekstu/ikon dla statusu.
Postęp jest daleki od działania (użytkownik nie widzi).

17) Żetony systemu projektowania (przykład)

json
{
"progress": {
"barHeight": 4,
"radius": 999,
"inMs": 160,
"outMs": 120,
"pollHz": 10
},
"status": {
"tones": { "success": "#", "info": "#", "warning": "#", "danger": "#" },
"badge": { "radius": 8, "px": "6 10", "icon": 14 }
},
"skeleton": {
"rowHeight": 16,
"gap": 8,
"reduceMotion": true
},
"a11y": {
"useAriaBusy": true,
"live": "polite",
"contrastAA": true
}
}
Ustawienia wstępne CSS:
css
.badge{display:inline-flex; gap:6px; align-items:center; padding:6px 10px; border-radius:8px; font-size:.875rem}
.badge--success{background:var(--bg-success); color:var(--on-success)}
.skeleton{background:linear-gradient(90deg, var(--sk1), var(--sk2), var(--sk1)); border-radius:8px}
@media (prefers-reduced-motion: reduce){.skeleton{background:var(--sk1)} }

18) Lista kontrolna QA

Reakcja i uczciwość

  • TTFF ≤ 100 ms; istnieje miejscowy zajęty/szkielet.
  • Określić - rzeczywisty%; nieokreślony - z wyjaśnieniem.

Dostępność

  • 'rola =' progressbar '/' aria-valuenow 'poprawna; regiony na żywo na aktualizacjach.
  • Kontrast odznaki/tekst ≥ AA; kolor nie jest jedynym nosicielem znaczenia.

Zachowanie

  • Optymistyczne z prawidłowym odwróceniem i wyjaśnieniem.
  • Wyświetlane są kolejki; nastąpiło anulowanie/wstrzymanie (w stosownych przypadkach).
  • Postępy w pobliżu sceny nie pokrywają się z CTA.

Wydajność

  • Aktualizacje nie więcej niż 10-15 razy/s; animacje "transform/dymorfizm'.
  • Szkielet nie drażni się z „reduce-motion”.

Teksty

  • Krótki, bez żargonu technicznego; „co dalej” po zakończeniu.
  • Brak „obietnic” dokładnego czasu, chyba że gwarantowane.

19) Dokumentacja w systemie projektowym

Кобонента: „Na pasku”, „Na okręgu”, „Na Stepperze”, „Na Badge”, „Na Skeletonie”.
Zasady wyboru typu, kopiowania i kolorów statusów.
Wzory: optymistyczne, kolejki, przetwarzanie tła, synchronizacja offline.
Do/Don gallery: „perpetual spinner”, false percentages, „mute” CTA vs good TTFF.

Krótkie podsumowanie

Wskaźniki postępu i statusu powinny zapewniać terminowe, uczciwe i dostępne informacje zwrotne. Umieść je obok akcji, odróżnić definitywny i niepewny postęp, szanować a11y i nie nadużywać animacji. W iGaming jest to szczególnie ważne dla zakładów, płatności, turniejów i KYC - spokojny, przewidywalny postęp bezpośrednio zwiększa zaufanie i konwersję.

Contact

Skontaktuj się z nami

Napisz do nas w każdej sprawie — pytania, wsparcie, konsultacje.Zawsze jesteśmy gotowi pomóc!

Telegram
@Gamble_GC
Rozpocznij integrację

Email jest wymagany. Telegram lub WhatsApp są opcjonalne.

Twoje imię opcjonalne
Email opcjonalne
Temat opcjonalne
Wiadomość opcjonalne
Telegram opcjonalne
@
Jeśli podasz Telegram — odpowiemy także tam, oprócz emaila.
WhatsApp opcjonalne
Format: kod kraju i numer (np. +48XXXXXXXXX).

Klikając przycisk, wyrażasz zgodę na przetwarzanie swoich danych.