GH GambleHub

Modaller ve çıkış panelleri

1) Ne zaman kullanılacağı

Modal (arka planla diyalog) - tam dikkat gerektiren kritik çözümler ve kısa görevler için: eylemin onaylanması, yasal rıza, tehlikeli işlemler, kısa formlar ≤ 1-2 alanları. Arka planı kilitler.
Çekmece/Levha (çekmece paneli) - yerinde uzantı için: nesne ayrıntıları, nitelik düzenleme, listeden seçim, yardımcı gezinme. Arka plan görünür - bağlam korunur.

Seçim kuralı:
  • Eylem konsantrasyon ve onay gerekiyorsa - Modal.
  • Ne zaman bağlamı kaydetmek ve Çekmece bir "paralel" genel bakış vermek.

2) Yapı ve boyutlar

Modal

Başlık (gerekli) - vücut - CTA (Birincil/İkincil/Yıkıcı).
Boyutlar: S (480-560 px), M (640-720 px), L (≤ 840 px). Mobil - tam ekran sayfasında.

Çekmece/Levha

Yön: sağ kenar (masaüstü, düzenleme), alt (mobil, eylemler), bazen sol (gezinme).
Genişlik: 360-480 (S), 480-640 (M), 640-800 (L) Mobilde: %90-100 genişlik/yükseklik.

İçeriğin yüksekliği her zaman sınırlıdır, içeride kaydırılır; Başlık/STA sabittir.

3) Metin Yazarlığı ve CTA

Başlık = Eylem/Anlam: Oranı Onayla, Ödeme Yöntemini Seç, KYC Gerekli.
Kısa metin, 1-2 cümle. Belirsiz formüllerden kaçının.
CTA: Bir Birincil, bir sonraki İkincil ("İptal") ve gerekirse Yıkıcı.

Riskli eylemler için 1 satırlık bir açıklama ekleyin: "Eylem geri döndürülemez. 10 saniye içinde iptal edebileceksiniz (varsa) "

4) Davranış ve durumlar

Açılış: Anında yanıt ≤ 100 ms, sonra animasyon 120-180 ms.
Kapatma: Açılıştan daha hızlı (80-140 ms), odağı tetiğe döndürün.
Meşgul: Konteynerde 'aria-busy = "true"', yeniden deneme kilidi olan düğme.
Kaydedilmemiş (kirli form): kapanışta - iletişim uyarısı ("Kaydedilmemiş değişiklikler var").
Arka planda kaçış/tıklama: Tehlikeli olmayan diyaloglar için kabul edilebilir; Kritik - sadece açık düğmeler için.

5) Kullanılabilirlik (A11y)

Container: 'role = "dialog've' aria-modal =" true "'(gerçek bir modal için).
Başlık 'aria-labelledby'ile bağlantılıdır; Açıklama - 'aria-description by'.
Odak tuzağı içinde; Birincil odak başlık veya ilk etkileşimli öğedir.
Kapattıktan sonra odağı orijinal tetikleyiciye döndürür.
Kaydırma arka planı yok: 'belge. DOM'un geri kalanında body {overflow: hidden;} 'veya' inert '.
Klavye desteği: Tab/Shift + Tab döngüseldir; Esc kapanır (komut dosyası yasaklanmadıkça).
'Prefers-reduced-motion'ı düşünün: animasyonları devre dışı bırakma/basitleştirme.

Şablon:
html
<div class="backdrop" data-open hidden></div>
<div class="dialog" role="dialog" aria-modal="true" aria-labelledby="d-title" aria-describedby="d-desc" hidden>
<h2 id =" d-title "> Confirm Bid </h2>
<p id =" d-desc "> Sum of 200 ₴ by factor 1. 85</p>
<div class="actions">
<button class =" btn btn--primary "> Confirm </button>
<button class =" btn btn--ghost "> Cancel </button>
</div>
</div>

6) Performans ve mimari

Bir portal üzerinden oluşturma (bir uygulamanın üstündeki katman) - daha az z-indeks sorunu.
İçeriği ilk açıldığında tembel bir şekilde bağlayın, animasyonu kapattıktan sonra bırakın (veya ekran dışına çevirin).
Yalnızca 'transform/opacity' animasyon uygulayın; pahalı bulanıklık/büyük boy gölgelerden kaçının.
Arka plan kaydırmasını (kaydırma kilidi) kilitleyin, kapattıktan sonra "atlamaması" için geçerli konumu koruyun.
Çekmecedeki büyük listeler için sanallaştırmayı kullanın.

7) Mobil desenler

Hızlı eylemler/onaylar için alt sayfa: kapatmak için hareketleri aşağı kaydırın (eşikle).
Altta yapışkan-CTA; Kapat düğmesi - sol üstten.
Güvenli alan girintileri (çentik/hareket alanları).
Ekran klavyesi CTA ile çakışmamalıdır; Düzen - "kaldırma" içeriği veya klavyenin üzerinde sabit bir panel.

8) Hareket tasarımı

Giriş: solma + ışık kayması (modal: Y boyunca, çekmece: görünüm ekseni boyunca). 120-180 ms.
Çıkış: daha kısa (80-140 ms), easing 'cubic-bezier (0. 2,0,0. 2,1)`.
Background-Opacity değeri 0-0'dır. 4–0. 6. Titreşimler ve sonsuz parlama olmadan.
'Prefers-reduced-motion' için: kayma yok, sadece soluk.

9) Kapanış yönetimi

Sadece güvenli operasyonlar için derhal kapatma.
Bir hata varsa, diyalogda kalırız, nedenini gösterir ve yeniden deneriz.
Arka planda yürütme - diyaloğu kapatın ve "Arka planda yürütüyoruz"..., artı "Geçmiş" bölümünü tost gösterin.

10) Tipik iGaming Senaryoları

10. 1 Teklif onayı (Modal)

İçerik: olay, katsayı, miktar, potansiyel kazanç, katsayı geçerlilik süresi.
Düğmeler: "Onayla" (birincil), "İptal".
Gecikme desen> 3 s: metin "Onay bekliyor"...; katsayı değişirse, dürüst bir güncelleme.

10. 2 Cashout (Modal/Sheet)

Geçerli cashout miktarını ve pencere zamanlayıcısını görüntüler.
Onay + olası Geri Alma (düzenleme izin veriyorsa).

10. 3 Bir ödeme yöntemi seçme (Çekmece)

Komisyonlar/ETA ile yöntemlerin listesi; Mini formun ½'sini seçer.

Varsayılan yöntemi kaydetme; Girdi kaybı olmadan geri dönüş

10. 4 KYC (Çekmece - Modal)

Belgeleri/istemleri yüklemek için çekmece.
Eksik yükle kapatmaya çalışırken modal: kaydedilmemiş hakkında uyarı.

10. 5 Sorumlu oyun limitleri (Modal)

Radyo "Gün/Hafta/Ay", miktar alanı, satır "Yürürlüğe girecek"....

11) Anti-desenler

İç içe modaller (modal üzeri modal). Tek bir diyalog veya adım dizisi kullanın.
İçeriğin düzenli olarak görüntülenmesi için Modalka (daha iyi çekmece/sayfa).
Gizli çapraz veya sadece "microzone'ile kapanış.
Riskli eylem - "arka plana göre" kapatma izni.
Bir modalda uzun şekil (+'yı ayrı bir ekrana/panele taşıyın).
Tetiklemeye odaklanma geri dönüşü yok.

12) Tasarım sistemi belirteçleri (örnek)

json
{
"dialog": {
"radius": 12,
"shadow": "var(--elev-4)",
"sizes": { "s": 520, "m": 680, "l": 840 },
"backdropOpacity": 0. 5,
"padding": "20 24",
"gap": 16
},
"drawer": {
"width": { "s": 360, "m": 480, "l": 640 },
"edge": "right",
"radius": 12,
"shadow": "var(--elev-4)"
},
"motion": {
"inMs": 160,
"outMs": 120,
"ease": "cubic-bezier(0. 2,0,0. 2,1)",
"reduce": true
},
"a11y": {
"useAriaModal": true,
"focusTrap": true,
"returnFocus": true
}
}
CSS hazır ayarları (konsept):
css
.backdrop[data-open]{position:fixed; inset:0; background:rgba(0,0,0,.5); backdrop-filter:saturate(80%); opacity:1; transition:opacity. 16s}
.dialog,[data-drawer]{position:fixed; background:var(--bg-elevated); border-radius:12px; box-shadow:var(--elev-4);}
.dialog{inset:auto; left:50%;top:50%;transform:translate(-50%,-50%); max-width:840px; width:min(100% - 32px, var(--dialog-w,680px));}
[data-drawer="right"]{top:0; right:0; height:100%;width:var(--drawer-w,480px); transform:translateX(0)}
.dialog[hidden],.backdrop[hidden]{display:none}

13) Davranış parçacıkları

Odak tuzağı + odak geri dönüşü:
js const openBtn = document. getElementById('open');
const dlg = document. querySelector('.dialog');
let prevFocus;

function openDialog() {
prevFocus = document. activeElement;
dlg. hidden = false; document. body. style. overflow = 'hidden';
const focusable = dlg. querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])');
(focusable[0]        dlg). focus();
function onKey(e){
if(e. key==='Escape') return closeDialog();
if(e. key!=='Tab') return;
const first = focusable[0], last = focusable[focusable. length-1];
if(e. shiftKey && document. activeElement===first){ e. preventDefault(); last. focus(); }
else if(!e.shiftKey && document. activeElement===last){ e. preventDefault(); first. focus(); }
}
dlg. addEventListener('keydown', onKey);
dlg. dataset. off = ()=> dlg. removeEventListener('keydown', onKey);
}
function closeDialog() {
dlg. dataset. off && dlg. dataset. off();
dlg. hidden = true; document. body. style. overflow = '';
prevFocus && prevFocus. focus();
}
Kapatma hareketi olan sayfa (mobil, basitleştirilmiş):
js let startY=0, delta=0;
const sheet = document. querySelector('.sheet');
sheet. addEventListener('touchstart', e => startY = e. touches[0].clientY);
sheet. addEventListener('touchmove', e => {
delta = Math. max(0, e. touches[0].clientY - startY);
sheet. style. transform = `translateY(${delta}px)`;
});
sheet. addEventListener('touchend', () => {
if (delta > 120) sheet. classList. remove('open'); else sheet. style. transform = '';
delta = 0;
});

14) Metrikler ve deneyler

Modala göre Açık Oran/Tamamlama Oranı: Kaç kişi eylemi açtı ve tamamladı.
Karar Verme Süresi: Açılıştan Birincil'e tıklamaya kadar.
Dismit Oranı ve nedenleri (Esc/background close vs "Cancel").
Meşgul komut dosyalarında Hata/Yeniden Deneme Oranı.
A/B: modal vs çekmece, CTA metni, alan sırası, "onayla" vs "geri al".

15) KG kontrol listesi

Kullanılabilirlik

  • 'role = "dialog"', 'aria-modal =' true '', correct 'aria-labelledby/-describedby'.
  • Odak tuzağı çalışır; Odak tetiğe döner.
  • Esc kapanır (izin verilirse); Sekme döngüseldir.
  • AA ≥ kontrast; Anlamı ileten sadece renk değildir.

Davranış

  • TFF ≤ 100 ms; Animasyon 120-180 ms/çıkış 80-140 ms.
  • Sayfayı "atlamadan" arka planı kaydırarak kilitleyin.
  • Kirli formda kaydedilmemiş koruma.
  • Meşgul durum, doğru Yeniden deneme/hatalar.

Arayüz

  • Temiz başlık ve bir Birincil-CTA.
  • Bir çapraz/kapatma düğmesi mevcuttur.
  • Boyutlar uyarlanabilir; Cep telefonunda - bir jest ile sayfa.

Performans

  • Portallar/z-indeksi doğrudur; "Yayın" olmadan.
  • Tembel başlatma; Yalnızca transform/opaklık canlandırılır.

16) Tasarım sistemindeki belgeler

Bileşenler: 'Modal', 'Çekmece/Sayfa', 'ConfirmDialog', 'KaydedilmemişKoruma'.
Belirteçler: boyutlar, girintiler, gölgeler, animasyonlar, arka plan, odak halkası.
Kılavuzlar: "Ne zaman modal vs çekmece", metin yazarlığı desenleri, riskli eylemler (onayla/geri al), kaydırma kilidi ve portallar, küçültme hareketi.
Do/Don't gallery: iç içe modallar (don't), modalda uzun formlar (don't), bağlamı genişletmek için sayfa (do).

Kısa Özet

Modalka - tam dikkat altındaki kararlar için, çekmece - akışı bozmadan bağlamı genişletmek için. Yapıyı basit, CTA'yı açık ve etkileşimleri öngörülebilir ve erişilebilir tutun. Performansa saygı gösterin, arka planı kilitleyin ve odağı döndürün. İGaming senaryolarında, bu doğrudan güveni etkiler: bahis onayları, nakit ödeme, ödeme yöntemi seçimi ve KYC adil, hızlı ve güvenli olmalıdır.

Contact

Bizimle iletişime geçin

Her türlü soru veya destek için bize ulaşın.Size yardımcı olmaya her zaman hazırız!

Telegram
@Gamble_GC
Entegrasyona başla

Email — zorunlu. Telegram veya WhatsApp — isteğe bağlı.

Adınız zorunlu değil
Email zorunlu değil
Konu zorunlu değil
Mesaj zorunlu değil
Telegram zorunlu değil
@
Telegram belirtirseniz, Email’e ek olarak oradan da yanıt veririz.
WhatsApp zorunlu değil
Format: +ülke kodu ve numara (örneğin, +90XXXXXXXXX).

Butona tıklayarak veri işlemenize onay vermiş olursunuz.