Pratik UI Örnekleri: Modal • Toast • Loading
Bu sayfada JavaScript ile en sık ihtiyaç duyulan 3 UI davranışını “küçük ve temiz” şekilde kuruyoruz: Modal aç/kapat, toast bildirim ve loading state.
1) Demo Butonları
Aşağıdaki butonlarla modal/toast/loading davranışlarını test edebilirsin.
İpucu
“Loading state” sadece overlay göstermek değildir. Kullanıcı bir işlemi iki kere tetiklemesin diye
butonu
disabled yap ve metin/spinner ile durum göster.
2) Modal (Aç/Kapat + ESC + Dışarı Tıkla)
Modal için dikkat edilmesi gereken püf noktalar:
- ESC ile kapat
- Backdrop (dış alan) tıklanınca kapat
- Sayfa scroll’unu modal açıkken kilitle (
body { overflow:hidden }) - Odak yönetimi (ileri seviye): ilk input’a fokus, tab tuşu ile içeride kalma (istersen ekleriz)
<!-- Modal Backdrop -->
<div class="ui-modal-backdrop" id="modalBackdrop" aria-hidden="true">
<div class="ui-modal" role="dialog" aria-modal="true" aria-labelledby="modalTitle">
<div class="ui-modal-header">
<div>
<div class="ui-modal-title" id="modalTitle">Örnek Modal</div>
<div class="ui-modal-sub">Aç/Kapat, ESC ve dışarı tıklama destekli.</div>
</div>
<button class="ui-icon-btn" data-modal-close aria-label="Kapat">×</button>
</div>
<div class="ui-modal-body">
<label class="ui-label">Ad Soyad</label>
<input class="ui-input" placeholder="Örn: Mehmet Erbaş">
<label class="ui-label mt-2">Not</label>
<textarea class="ui-textarea" rows="3" placeholder="Kısa not..."></textarea>
</div>
<div class="ui-modal-footer">
<button class="btn btn-light" data-modal-close>Vazgeç</button>
<button class="btn btn-primary" id="btnModalSave">Kaydet</button>
</div>
</div>
</div>
3) Toast Bildirim (Stack + Auto Close)
Toast’lar “işlem sonucu geri bildirimi” için idealdir. Başarılı, hata, bilgi gibi tipleri ayrı göster. Kısa yaşasın ama kullanıcı okuyabilsin (örn. 3–5 sn).
// Örnek:
// toast("Kaydedildi ✅", "success");
// toast("Bir hata oluştu ❌", "error");
// toast("Bilgi: işlem başladı", "info");
4) Loading State (Overlay + Buton Spinner)
Gerçek senaryoda fetch/AJAX sırasında aktif edilir. Burada “fake async” ile 1.5sn bekletiyoruz.