WCAG 2.5.4 · A Seviyesi · ADA Title II

ADA ve sallama, eğme kontrolleri

Cihazı sallayarak veya eğerek tetiklenen özelliklerin ekranda bir alternatifi ve hareketi kapatma yolu olmalı.

Sallamak veya eğmek tek yol olduğunda

Bazı özellikler cihazın sallanmasına, eğilmesine ya da hareket ettirilmesine veya kameranın algıladığı kullanıcı hareketine, örneğin el sallamaya yanıt verir. WCAG 2.1, 2.5.4 başarı ölçütü, cihaz hareketi veya kullanıcı hareketiyle çalışan her şeyin sıradan arayüz bileşenleriyle de (düğme, anahtar) çalışabilmesini ve hareket yanıtının kazara tetiklenmemesi için kapatılabilmesini ister.

İki istisna vardır. Biri, hareketin yardımcı teknolojinin sağladığı erişilebilirlik destekli bir arayüz üzerinden çalışmasıdır. Diğeri, hareketin zorunlu olması ve kaldırılmasının etkinliği geçersiz kılmasıdır; adım sayar gibi. Konum, kamerayı QR koduna doğrultma, yazma veya ekrana dokunma gibi başka amaçlarla kullanılan hareketler bu ölçütün kapsamında değildir.

Alternatife kimin ihtiyacı var?

  • Telefonu tekerlekli sandalyeye veya masaya sabitlenmiş, sallayamayan ya da eğemeyen kişiler.
  • Tremoru ya da istemsiz hareketi olan, hareket tetikleyicilerinin beklenmedik zamanda çalıştığı kişiler.
  • Kameranın önünde el hareketi yapamayan kişiler.

Kamu hizmetlerinde nerede görülür? (ADA açısından)

Tipik örnekler: bir form uygulamasında "geri almak için salla", telefon sallanınca varış saatlerini yenileyen bir toplu taşıma uygulaması, el sallayınca yanıtlayan bir kiosk veya görüntülü görüşme uygulaması, ya da eğilerek kontrol listesini kaydıran bir denetim uygulaması. O hareketi yapamayan bir vatandaş özelliğin dışında kalır; yanlışlıkla yapan ise girdiği verileri kaybedebilir. Title II kuralı kapsamında yerel uygulamalar da dahildir (bkz. mobil uygulamalar).

Web örnekleri: geri alma, yenileme, eğerek kaydırma

Yardım başvurusunu sallayarak temizleme

Hatalı
window.addEventListener("devicemotion", e => {
  const a = e.accelerationIncludingGravity;
  if (Math.abs(a.x) > 25) basvuruyuTemizle();   // temizlemenin tek yolu
});
Doğru
<button type="button" id="basvuru-temizle">Başvuruyu temizle</button>
<label><input type="checkbox" id="sallama-acik"> Sallayarak temizlemeye izin ver</label>
<script>
  const dugme = document.getElementById("basvuru-temizle");
  dugme.addEventListener("click", basvuruyuTemizle);
  window.addEventListener("devicemotion", e => {
    if (!document.getElementById("sallama-acik").checked) return;
    if (Math.abs(e.accelerationIncludingGravity.x) > 25) basvuruyuTemizle();
  });
</script>

Otobüs varışlarını sallayarak yenileme

Hatalı
window.addEventListener("devicemotion", sallamaAlgilandi => varislariYenile());
Doğru
<button type="button" id="yenile">Varışları yenile</button>
<script>
  document.getElementById("yenile").addEventListener("click", varislariYenile);
  if (!tercihler.hareketKapali) {
    window.addEventListener("devicemotion", sallamayiIsle);   // isteğe bağlı kısayol
  }
</script>

Uzun denetim listesini eğerek kaydırma

Hatalı
window.addEventListener("deviceorientation", e => {
  kontrolListesi.scrollBy(0, e.beta * 2);
});
Doğru
<button type="button" id="yukari">Yukarı kaydır</button>
<button type="button" id="asagi">Aşağı kaydır</button>
<script>
  yukari.onclick = () => kontrolListesi.scrollBy(0, -120);
  asagi.onclick = () => kontrolListesi.scrollBy(0, 120);
  // Eğerek kaydırma korunuyorsa hareket yanıtını kapatan ayarın arkasında olmalı.
</script>

Mobil örnekler: SwiftUI ve Jetpack Compose

İki platform da ham hareket olaylarını size verir; alternatifi ve kapatma anahtarını sağlamak sizin işiniz.

Hatalı
// SwiftUI
.onReceive(NotificationCenter.default.publisher(for: .deviceDidShake)) { _ in
  taslak = ""          // özel bildirim; UIWindow motionEnded geçersiz kılmasından gönderilir
}
Doğru
// SwiftUI
// Uygulamanızın tanımladığı özel ad; UIWindow motionEnded geçersiz kılmasından gönderin
extension Notification.Name { static let deviceDidShake = Notification.Name("deviceDidShake") }

@AppStorage("sallayarakTemizle") private var sallayarakTemizle = true

Button("Taslağı temizle") { taslak = "" }
Toggle("Sallayarak temizle", isOn: $sallayarakTemizle)
  .onReceive(NotificationCenter.default.publisher(for: .deviceDidShake)) { _ in
    if sallayarakTemizle { taslak = "" }
  }
Hatalı
// Jetpack Compose
DisposableEffect(Unit) {
  sensorManager.registerListener(sallamaDinleyici, ivmeolcer, SENSOR_DELAY_UI)
  onDispose { sensorManager.unregisterListener(sallamaDinleyici) }
}
Doğru
// Jetpack Compose
Button(onClick = { taslagiTemizle() }) { Text("Taslağı temizle") }
Switch(checked = sallamaAcik, onCheckedChange = { sallamaAcik = it })

if (sallamaAcik) {
  DisposableEffect(Unit) {
    sensorManager.registerListener(sallamaDinleyici, ivmeolcer, SENSOR_DELAY_UI)
    onDispose { sensorManager.unregisterListener(sallamaDinleyici) }
  }
}

Hareket özelliklerini denetleme

  1. Sallama, eğme, döndürme veya vücut ya da el hareketine yanıt veren her özelliği listeleyin. Ürün ekibine de sorun; bu çoğu zaman belgelenmemiştir.
  2. Her biri için aynı işi yapan ekran kontrolünü bulun. Yoksa başarısızdır.
  3. Hareket yanıtını kapatan ayarı arayın. Uygulamayı yeniden başlattıktan sonra da geçerli kaldığını doğrulayın.
  4. Cihazı bir altlık üzerinde tamamen sabit tutun (veya hareket sensörü olmayan masaüstü tarayıcı kullanın) ve görevi yalnızca kontrollerle tamamlayın.
  5. Araçlar hareket işleyicilerinin çalıştığını göremez. Pratik denetim, kaynak kodda devicemotion, deviceorientation, motionEnded ve sensör dinleyicilerini okumaktır.

Sahada görülen hatalar

  • Temizle düğmesi ekleyip sallama yanıtını kapatma yolu bırakmamak.
  • Kapatma anahtarını uygulamanın erişemediği sistem ayarlarının derinine gömmek.
  • Kamera tabanlı bir hareketi ölçütün dışında saymak; ölçüt kullanıcı hareketini de kapsar.
  • İstisnayı yalnızca kolaylık sağlayan, geçersiz kılınmayacak bir özelliğe uygulamak.

Yayına almadan önce

  • Hareketle tetiklenen her özelliğin aynı işi yapan görünür bir düğmesi veya anahtarı var.
  • Hareket yanıtı kapatılabiliyor ve tercih kalıcı.
  • Alternatifsiz kalan hareket zorunlu ve nedenini söyleyebiliyorsunuz.

Kaynaklar

Standart sürümü: WCAG 2.1 (W3C Tavsiye Kararı, 5 Haziran 2018); Title II web kuralında adı geçen sürüm. Bu sayfa bilgilendirme amaçlıdır ve hukuki tavsiye niteliği taşımaz. Bağlayıcı metin için ADA yasasının ve yönetmeliklerinin resmî metinlerini esas alın ve size nasıl uygulandığını bir avukata sorun.

Corpowid, Gartner tarafından tanınan bir platformdur.

Corpowid, dijital erişilebilirlik alanındaki yenilikçi yaklaşımı ve performansı nedeniyle dünyanın önde gelen araştırma ve danışmanlık şirketlerinden biri olan Gartner tarafından takdir edilmiştir. Bu rozetler, yapay zeka destekli ve kapsayıcı web deneyimleri oluşturma konusundaki kararlılığımızı yansıtmaktadır.

Corpowid hakkında sorularınız mı var?

Bizimle iletişime geçin.

Size en kısa sürede geri dönüş sağlayacağız.