Ders 13 / 25
Döngüsel İçerik Gezinimi
Otomatik geçişin okuma süresiyle ilişkisi, durdurma denetiminin koşulsuz gerekliliği, görünmeyen kartların sekme sırasından çıkarılması ve otomatik değişen içeriğin neden duyurulmadığı.
İçindekiler
Buraya kadarki bileşenlerde içerik yerinde durdu ve kullanıcı ona kendi hızıyla ulaştı. Katalog ana sayfasındaki öne çıkan kayıtlar şeridi bunun tersini yapar: beş kart tek bir alanda sırayla gösterilir ve geçiş kullanıcının bir eylemi olmadan gerçekleşir.
Kalıbın gerekçesi genellikle alan tasarrufudur — beş kart bir kartın yerini kaplar. Bedeli ise ölçülebilir: kullanıcının okuma hızı ile geçiş aralığı arasındaki ilişki, hareketin durdurulabilirliği ve görünmeyen kartların klavye sırasında ne yaptığı. Bu ders bedeli sayıya çevirir.
Kalıbın Çözdüğü Sorun ve Kullanılmayacağı Yer
Döngüsel gezinim, sıralı ve eşdeğer bir içerik kümesini sınırlı bir alanda sunar. Kullanım koşulu iki maddedir: kartlar birbirinin alternatifi olmalı (biri kaçırılınca bilgi kaybolmamalı) ve kullanıcı hepsini görmek zorunda olmamalıdır.
Bu koşul sağlanmıyorsa kalıp yanlıştır. Bir adımlar dizisi, bir form akışı ya da kaçırılmaması gereken bir uyarı şeride konmaz. Son bölümdeki karşılaştırma bunun nedenini sayıyla veriyor: şeritte içeriğin yüzde sekseni her an görünmez durumdadır.
Okuma Süresi ile Geçiş Aralığı
Aşağıdaki hesap kartların okuma süresini kelime sayısından tahmin eder ve geçiş aralığı seçeneklerini bu süreye göre değerlendirir.
// dongu.mjs — otomatik gecisli icerik seridi: okuma suresi, durdurma ve sekme sirasi // Ana sayfadaki "one cikan kayitlar" seridi: bes kart, her karta bir metin. const KARTLAR = [ { baslik: "Gökbilim El Kitabı", metin: "Gözlem düzeneğinin kurulumu ve ölçüm günlüğü tutma yöntemleri.", eylem: 2 }, { baslik: "Kuzey Gökyüzü Atlası", metin: "Kuzey yarımküre takımyıldızlarının mevsimlere göre haritaları.", eylem: 2 }, { baslik: "Ölçüm Yöntemleri", metin: "Sıcaklık, nem ve basınç ölçümünde hata payının hesaplanması.", eylem: 1 }, { baslik: "Yamaç Meteorolojisi", metin: "Yükseltiye bağlı sıcaklık değişiminin uzun dönem kayıtları.", eylem: 2 }, { baslik: "Kayıt Defteri Tarihi", metin: "Gözlem defterlerinin arşivlenme biçimleri ve okunma sorunları.", eylem: 1 }, ]; // 1. Okuma suresi: karakter sayisindan tahmini okuma suresi. // Olcut: dakikada 200 kelime (yetiskin, tanidik icerik), kelime basina ortalama 6 karakter. const KELIME_DK = 200; const okumaSuresi = (s) => { const kelime = s.trim().split(/\s+/).length; return (60 * kelime) / KELIME_DK; }; console.log("kart kelime okuma suresi (s)"); let enUzun = 0; for (const k of KARTLAR) { const t = okumaSuresi(k.baslik + " " + k.metin); enUzun = Math.max(enUzun, t); console.log(` ${k.baslik.padEnd(24)} ${String((k.baslik + " " + k.metin).split(/\s+/).length).padStart(4)} ${t.toFixed(1).padStart(14)}`); } console.log(`en uzun kartin okuma suresi: ${enUzun.toFixed(1)} s`); // 2. Gecis araligi kararlari ve sonuclari. const ARALIKLAR = [3, 5, 8, 12]; console.log("\naralik (s) en uzun karti okumaya yeter mi WCAG 2.2.2 gerektirir mi"); for (const a of ARALIKLAR) { console.log( `${String(a).padStart(9)} ${(a >= enUzun ? "evet" : "HAYIR").padStart(29)} ` + `${(a > 5 ? "evet (5 s ustu hareket)" : "evet (otomatik baslayan hareket)").padStart(32)}` ); } console.log("kural: sure ne olursa olsun durdurma denetimi zorunludur; sure yalniz"); console.log(" okuma yetismesini belirler."); // 3. Sekme siralamasi: gizli kartlar sirada kalirsa ne olur? const eylemToplam = KARTLAR.reduce((t, k) => t + k.eylem, 0); const gorunen = KARTLAR[0]; console.log("\n--- sekme duragi sayisi ---"); console.log(` butun kartlar sirada : ${eylemToplam + 4} (kart eylemleri + onceki/sonraki + durdur + nokta grubu)`); console.log(` yalniz gorunen kart : ${gorunen.eylem + 4}`); console.log(` fark : ${eylemToplam - gorunen.eylem} durak gorunmeyen icerige gidiyor`); // 4. Odak seridin icindeyken gecis olursa. const SENARYO = [ { ad: "gecis surer, odak icerde", odakKaybi: true, sonuc: "odak belge kokune duser" }, { ad: "odakta duraklar", odakKaybi: false, sonuc: "kullanici okumasini bitirir" }, { ad: "uzerine gelmede duraklar", odakKaybi: true, sonuc: "klavye kullanicisi korunmaz" }, ]; console.log("\n--- odak seridin icindeyken otomatik gecis ---"); console.log("politika odak kaybi sonuc"); for (const s of SENARYO) { console.log(` ${s.ad.padEnd(28)} ${(s.odakKaybi ? "var" : "yok").padEnd(11)} ${s.sonuc}`); } // 5. Duyuru politikasi: otomatik gecis duyurulur mu? function duyuruPolitikasi(otomatik) { return otomatik ? { canliBolge: "kapali", gerekce: "kullanicinin baslatmadigi degisiklik duyurulmaz" } : { canliBolge: "kibar", gerekce: "kullanicinin kendi eylemi sonucu gelen icerik duyurulur" }; } console.log("\n--- duyuru politikasi ---"); for (const otomatik of [true, false]) { const p = duyuruPolitikasi(otomatik); console.log(` gecis ${(otomatik ? "otomatik" : "elle").padEnd(9)} canli bolge: ${p.canliBolge.padEnd(7)} ${p.gerekce}`); } // 6. Konum bildirimi: kacinci kart goruluyor? const konum = (i, n) => `${i + 1} / ${n}`; console.log("\nkonum bildirimi ornekleri: " + KARTLAR.map((_, i) => konum(i, KARTLAR.length)).join(" ")); // 7. Serit yerine dizilim: ayni icerik kaydirilmadan gosterilseydi? console.log("\n--- serit ile dizilimin karsilastirmasi ---"); console.log(` seritte ayni anda gorunen kart : 1 / ${KARTLAR.length}`); console.log(` izgarada ayni anda gorunen kart: ${KARTLAR.length} / ${KARTLAR.length}`); console.log(` seritte gorunmeyen icerik : %${(100 * (KARTLAR.length - 1) / KARTLAR.length).toFixed(0)}`);
kart kelime okuma suresi (s)
Gökbilim El Kitabı 11 3.3
Kuzey Gökyüzü Atlası 9 2.7
Ölçüm Yöntemleri 10 3.0
Yamaç Meteorolojisi 9 2.7
Kayıt Defteri Tarihi 10 3.0
en uzun kartin okuma suresi: 3.3 s
aralik (s) en uzun karti okumaya yeter mi WCAG 2.2.2 gerektirir mi
3 HAYIR evet (otomatik baslayan hareket)
5 evet evet (otomatik baslayan hareket)
8 evet evet (5 s ustu hareket)
12 evet evet (5 s ustu hareket)
kural: sure ne olursa olsun durdurma denetimi zorunludur; sure yalniz
okuma yetismesini belirler.
--- sekme duragi sayisi ---
butun kartlar sirada : 12 (kart eylemleri + onceki/sonraki + durdur + nokta grubu)
yalniz gorunen kart : 6
fark : 6 durak gorunmeyen icerige gidiyor
--- odak seridin icindeyken otomatik gecis ---
politika odak kaybi sonuc
gecis surer, odak icerde var odak belge kokune duser
odakta duraklar yok kullanici okumasini bitirir
uzerine gelmede duraklar var klavye kullanicisi korunmaz
--- duyuru politikasi ---
gecis otomatik canli bolge: kapali kullanicinin baslatmadigi degisiklik duyurulmaz
gecis elle canli bolge: kibar kullanicinin kendi eylemi sonucu gelen icerik duyurulur
konum bildirimi ornekleri: 1 / 5 2 / 5 3 / 5 4 / 5 5 / 5
--- serit ile dizilimin karsilastirmasi ---
seritte ayni anda gorunen kart : 1 / 5
izgarada ayni anda gorunen kart: 5 / 5
seritte gorunmeyen icerik : %80
Çıktının ilk bölümü en uzun kartın yaklaşık üç buçuk saniyede okunduğunu gösteriyor. Bu tahmin tanıdık içerik ve akıcı okuma varsayar; ekran okuyucuyla dinleyen, düşük görme keskinliğiyle okuyan ya da içeriğe yabancı bir kullanıcı için süre kat kat uzar. Tahmin bu yüzden bir alt sınırdır, hedef değil.
İkinci bölüm aralık seçeneklerini iki ölçütle değerlendiriyor. Üç saniyelik aralık en uzun kartı okumaya yetmiyor. Beş saniyenin üstündeki her aralık ise hareketi süreli hareket kategorisine sokuyor. Tablonun asıl gösterdiği şu: hangi aralık seçilirse seçilsin durdurma denetimi zorunludur. Aralık yalnız okumanın yetişip yetişmediğini belirler; kullanıcının denetimi elinde tutması ayrı ve koşulsuz bir gerekliliktir (WCAG 2.2.2).
Görünmeyen Kartlar Sekme Sırasında Ne Yapar
Üçüncü bölüm sekme durağı sayısını karşılaştırıyor. Beş kartın tamamı sırada bırakılırsa on iki durak oluşur ve bunların altısı o anda görünmeyen içeriğe gider. Klavye kullanıcısı şeridi geçerken görmediği kartların bağlantılarına odaklanır; odak göstergesi ekranda görünmeyen bir yerdedir.
Kural açıktır: görünmeyen kart klavye sırasından da erişilebilirlik ağacından da çıkarılır. Kartların tamamına erişim, şeridin kendi gezinme denetimleriyle sağlanır — önceki, sonraki ve konum noktaları.
Odak İçerideyken Geçiş
Dördüncü bölüm üç politikayı karşılaştırıyor. Geçişin sürmesi, odaktaki ögenin ortadan kalkması demektir; odak belge köküne düşer ve kullanıcı yerini kaybeder. Bu, Kip Pencereler dersindeki odak dönüş kuralının ihlalidir: odağın taşıyıcısı kaldırılıyorsa odağın nereye gideceği önceden kararlaştırılmış olmalıdır.
Yalnız işaretçi üzerine gelmede duraklamak klavye kullanıcısını korumaz. Doğru politika, odak şeridin içindeyken geçişin durmasıdır; kullanıcı okumasını bitirip odağı dışarı taşıdığında döngü kaldığı yerden sürer.
Otomatik Değişen İçerik Duyurulur mu
Beşinci bölüm duyuru politikasını ayırıyor. Kullanıcının başlatmadığı bir değişiklik duyurulmaz: her geçişte yeni kartın okunması, ekran okuyucu kullanıcısının o anda okuduğu metni sürekli kesintiye uğratır. Otomatik geçişte şerit sessizdir.
Kullanıcı önceki ya da sonraki düğmesine bastığında durum tersine döner: değişikliğin kaynağı kullanıcının kendi eylemidir ve sonucu bildirilmelidir. Altıncı bölümdeki konum bildirimi bu duyurunun içeriğidir — kaçıncı kartın kaç karttan gösterildiği. Konum noktaları da aynı bilgiyi taşır ve bu yüzden salt süsleyici değildir.
Klavye Sözleşmesi
| Tuş | Davranış |
|---|---|
Tab |
Şeridin denetimlerine ve yalnız görünen kartın eylemlerine uğrar |
Enter / Boşluk |
Odaktaki denetimi çalıştırır: önceki, sonraki, durdur, konum noktası |
| Ok tuşları | Konum noktaları grubu içinde kartlar arasında gezer (dönen sekme durağı) |
Şeridin kendisi bir sekme kümesi gibi kurulduğunda ok tuşu kuralı Sekmeler dersindeki sözleşmeyle aynıdır; kart içeriği bir bağlantı listesiyse ok tuşu kuralı yoktur.
Ölçülebilir Kısıtlar
- Beş saniyeden uzun süren, otomatik başlayan hareket için duraklatma, durdurma ya da gizleme denetimi zorunludur (WCAG 2.2.2).
- Hareket azaltma tercihi bildirildiğinde otomatik geçiş başlatılmaz; Kullanıcı Tercihleri dersindeki kural burada da geçerlidir.
- Görünmeyen kartlar sekme sırasında ve erişilebilirlik ağacında bulunmaz.
- Konum noktalarının hedef boyutu 24×24 pikselden küçük olamaz (WCAG 2.5.8); nokta görsel olarak küçükse etkin alan büyütülür.
- Otomatik geçişte canlı bölge kapalıdır; kullanıcı eylemiyle gelen geçiş kibar bölgeden duyurulur.
Sık Yapılan Hata
En sık hata, durdurma denetimini hiç koymamak ya da yalnız işaretçi üzerine gelmeye bağlamaktır. İkincisi, konum noktalarını süs sayıp ad vermemektir: “1 / 5” bilgisi hiçbir kanalda yoksa kullanıcı kaç kart olduğunu bilemez. Üçüncüsü, şeridi kaçırılmaması gereken içerik için kullanmaktır — kampanya duyurusu, uyarı ya da tek seferlik bilgi şeride konduğunda görülme olasılığı beşte bire iner.
Özet
- Döngüsel gezinim yalnız birbirinin alternatifi olan, kaçırılması bilgi kaybı yaratmayan içerik için kullanılır; şeritte içeriğin yüzde sekseni her an görünmez.
- Geçiş aralığı okuma süresine göre seçilir (modelde en uzun kart 3.3 saniye), ama aralık ne olursa olsun durdurma denetimi koşulsuz zorunludur.
- Görünmeyen kartlar sekme sırasından çıkarılır: beş kartlık şeritte bu karar altı durağı görünmeyen içerikten alır.
- Odak şeridin içindeyken otomatik geçiş durur; yalnız işaretçiye bağlı duraklatma klavye kullanıcısını korumaz.
- Otomatik geçiş duyurulmaz, kullanıcı eylemiyle gelen geçiş “kaçıncı / kaç” konumuyla duyurulur.
Sonraki Adım
Buraya kadarki bileşenlerin hepsi sayfanın akışı içindeydi: kart, sekme, tablo ve şerit kendi yerlerinde durur, kullanıcı onlara gider. Sıradaki bileşenler ise akışın üstüne çıkar ve çoğu zaman odağı devralır: ödünç alma onayı bir kip pencerede sorulur, sonuç bir bildirim şeridiyle iletilir, bekleme bir göstergeyle anlatılır. Sonraki konu bu katmanı ele alır ve ilk dersi kip pencerelerle başlar — odağın nasıl tuzaklanacağı, pencerenin nasıl kapatılacağı ve kapandığında odağın nereye döneceği.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.