WCAG 2.5.4 · A Seviyesi · EN 301 549 9.2.5.4

Hareket Etkinleştirme

Sallama, eğme ya da vücut hareketiyle tetiklenen işlevlerin kontrollerle de çalışmasını ve harekete yanıtın kapatılabilmesini ister.

Kısaca

Geri almak için sallamak, kaydırmak için eğmek, aramayı yanıtlamak için el sallamak. Cihazın ya da vücudun hareketiyle tetiklenen özellikler akıllıca görünür, ama cihazı tekerlekli sandalyeye sabitli kişiler için imkânsız olabilir ya da titremesi olanlar onları kazara tetikleyebilir.

Bu kriter, cihaz hareketiyle ya da kullanıcı hareketiyle çalıştırılan işlevlerin kullanıcı arayüzü bileşenleriyle de çalıştırılabilmesini ve kazara etkinleşmeyi önlemek için harekete yanıtın devre dışı bırakılabilmesini ister. İstisnalar: hareketin erişilebilirlik destekli bir arayüz üzerinden kullanılması ve işlev için zorunlu olması.

Neleri kapsar?

  • Cihaz hareketi: İvmeölçer ya da jiroskopla algılanan cihazı sallama, eğme ya da hareket ettirme.
  • Kullanıcı hareketi: El sallamak ya da baş sallamak gibi, kamera ya da sensörle algılanan kullanıcı hareketleri.
  • Geleneksel alternatif: Hareketle tetiklenen her işlev, düğme gibi görünür bir kontrolle de çalışmalıdır.
  • Kapatma yolu: Kullanıcılar kazara etkinleşmeyi önlemek için harekete yanıtı kapatabilmelidir. W3C'nin tarif ettiği teknik bir uygulama ayarıdır (G213).
  • İstisnalar: Erişilebilirlik destekli bir arayüz üzerinden kullanılan hareket ve adım sayar gibi zorunlu hareket.
  • Kapsam dışı hareketler: Konum izleme, kamerayı bir koda ya da belgeye doğrultma ve yazma, fare kullanma, dokunma hareketleri ya da yardımcı teknolojiyi çalıştırma gibi tesadüfi hareket.
  • Başka kriterler: Ekrandaki hareketler 2.5.1 ve 2.5.2 kapsamındadır.

Kimleri etkiler?

Hareketi yapamayan hareket engelli kişiler; örneğin cihazı tekerlekli sandalyeye ya da standa sabitlenmiş olanlar. Titremesi ya da istemsiz hareketleri olup işlevi kazara tetikleyenler. Cihazı yürürken, binerken ya da seyahat ederken kullananlar; hareketin sürekli olduğu yerlerde.

EAA ve EN 301 549'da

Avrupa Erişilebilirlik Yasası (Direktif (AB) 2019/882) 28 Haziran 2025'ten sonra piyasaya sunulan kapsamdaki ürün ve hizmetler için geçerlidir. Yasanın 47. gerekçesi web siteleri ve mobil uygulamalar için dört ilkeyi sayar: algılanabilirlik, işletilebilirlik, anlaşılabilirlik ve sağlamlık. Cihazı hareket ettirmeye bağlı olmayan kontroller, "işletilebilirlik" ilkesinin parçasıdır.

Teknik karşılığı EN 301 549 standardında bulunur. Standart, WCAG 2.5.4'i atıfla alır ve ortama göre ayrı maddelere dönüştürür.

WCAG 2.5.4'in EN 301 549'daki karşılıkları
MaddeOrtamNe ister?
9.2.5.4Web sayfalarıWeb içeriğinin WCAG 2.5.4 kriterini karşılamasını ister.
11.2.5.4Web dışı yazılım (yerel mobil uygulamalar)Yazılım, hareketle tetiklenen işlevlerin kontrollerle çalıştırılmasına ve harekete yanıtın kapatılmasına izin vermelidir.

Kriterin web dışı dokümanlara uygulanıp uygulanmadığı ve nasıl uygulandığı standardın 10. maddesinde belirtilir. Madde numaraları EN 301 549'un "9. + WCAG numarası" düzenine göredir. V3.2.1'de yazılım maddesi, açık ve kapalı işlevsellik için ayrı alt maddelere bölünmüştür. Kaynak gösterirken tam numaraları standarttan kontrol edin.

Standart sürümü: EN 301 549 V4.1.1 (Eylül 2026), WCAG 2.2'yi esas alan ve EAA için hazırlanan ilk sürümdür. Henüz AB Resmî Gazetesi'nde atıf almamıştır; bu nedenle EAA gereksinimlerini karşılamanın gönüllü teknik yolu olarak görülmelidir. Atıf yapıldığında EAA ile ilgili uygunluk karinesi sağlayacaktır. 2.5.4 kriterinin metni WCAG 2.1 ve 2.2'de aynıdır.

EAA bağlamında dikkat: Yasanın Madde 2/4 hükmü bazı içerikleri gereksinimlerin dışında bırakır; örneğin 28 Haziran 2025'ten önce yayımlanmış ofis dosya biçimleri ve bu tarihten sonra güncellenmeyen arşivler. Bu tarihten sonra yayımladığınız ya da değiştirdiğiniz içerik bu istisnaların kapsamında değildir.

Directive (EU) 2019/882, EUR-Lex, İngilizce, yeni sekmede açılır

Web için kod örnekleri

1. Düğmeli sallayarak temizleme

Hareketi görünür bir düğmeyle eşleştirin.

Hatalı
window.addEventListener("devicemotion", e => { if (isShake(e)) clearForm(); });
Doğru
<button type="button" id="clear">Formu temizle</button>
<script>
clear.addEventListener("click", clearForm);
// Sallama isteğe bağlı kısayol olarak kalır
</script>

2. Hareketi kapatan bir ayar

Kullanıcıların harekete yanıtı kapatmasına izin verin ve ayara uyun.

Hatalı
// Sallama algılama her zaman açık
Doğru
<label>
  <input type="checkbox" id="motion" checked>
  Sallayarak temizle
</label>
<script>
window.addEventListener("devicemotion", e => {
  if (!motion.checked) return;
  if (isShake(e)) clearForm();
});
</script>

3. Eğerek kaydırma, kontrollerle

Eğmenin yanında sonraki ve önceki düğmeleri de sunun.

Hatalı
window.addEventListener("deviceorientation", e => scrollByTilt(e.gamma));
Doğru
<button type="button" id="next">Sonraki sayfa</button>
<button type="button" id="prev">Önceki sayfa</button>
<!-- Eğme kalır, ama ayarlardan kapatılabilir -->

4. Kamera hareketleri

Bir kamera el sallamayı ya da baş hareketini algılıyorsa, aynı işlev için bir düğme ya da tuş sağlayın.

Hatalı
detectHandWave(video, () => answerCall());
Doğru
<button type="button" id="answer">Aramayı yanıtla</button>
<!-- El sallama isteğe bağlı kısayol olarak kalır ve kapatılabilir -->

5. İzin isteyin ve açıklayın

Tarayıcılar hareket sensörleri için izin ister. Özelliği hiçbir zaman zorunluluk değil, seçenek olarak sunun.

Hatalı
DeviceMotionEvent.requestPermission(); // izin verilene kadar uygulamayı engeller
Doğru
enableBtn.addEventListener("click", async () => {
  const state = await DeviceMotionEvent.requestPermission?.();
  if (state === "granted") enableShake();
});

6. Zorunlu istisna

Adım sayar, işini yapmak için harekete ihtiyaç duyar. Alternatif gerekmez, ama nedenini açıklayın.

Hatalı
<!-- Yanıtlamanın başka yolu olmayan eğmeye dayalı bir test -->
Doğru
<!-- Adım sayar: hareket zorunludur ve alternatif gerekmez -->

Mobil için kod örnekleri

Yerel uygulamalar hareketi en sık kullanır. Her hareket özelliği için bir düğme ve harekete yanıtı kapatan bir ayar sunun. Kullanıcıların kapatmasına izin veren sistem ayarını bozmayın.

iOS (SwiftUI)

import SwiftUI

struct NotesView: View {
    @AppStorage("shakeToUndo") private var shakeToUndo = true
    @State private var text = ""

    var body: some View {
        VStack {
            TextEditor(text: $text)
            // Aynı eylem için görünür bir kontrol
            Button("Geri al") { undoLastChange() }
            // Harekete yanıtı kapatan bir ayar
            Toggle("Sallayarak geri al", isOn: $shakeToUndo)
        }
        // Sallama uygulamanın kendi hareket işlemesiyle iletilir (örneğin bildirim
        // gönderen bir UIWindow alt sınıfı); ayara burada uyun
        .onReceive(NotificationCenter.default.publisher(for: .deviceDidShake)) { _ in
            if shakeToUndo { undoLastChange() }
        }
    }
}

Android (Jetpack Compose)

import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.material3.*
import androidx.compose.runtime.*

@Composable
fun NotesScreen(shakeEnabled: Boolean, onShakeChange: (Boolean) -> Unit, onUndo: () -> Unit) {
    Column {
        // Aynı eylem için görünür bir kontrol
        Button(onClick = onUndo) { Text("Geri al") }
        // Harekete yanıtı kapatan bir ayar
        Row {
            Text("Sallayarak geri al")
            Switch(checked = shakeEnabled, onCheckedChange = onShakeChange)
        }
    }
    // SensorEventListener'ı yalnızca shakeEnabled true iken kaydedin
}

Nasıl test edilir?

  • Hareket özelliklerini listeleyin: Sallamaya, eğmeye, cihazı hareket ettirmeye ya da kamerada görülen vücut hareketine yanıt veren her şeyi bulun.
  • Kontrol arayın: Her biri için aynı işi yapan bir düğme, menü öğesi ya da başka kontrol var mı?
  • Ayar arayın: Harekete yanıt, uygulamada ya da sistemde kapatılabiliyor mu?
  • Cihaz sabitken test edin: Cihazı bir standa yerleştirin. Hâlâ her işlevi kullanabiliyor musunuz?
  • Kazaları kontrol edin: Cihazla yürüyün ya da yolculuk edin. Hareket özelliği yanlışlıkla tetikleniyor mu ve durdurabiliyor musunuz?
  • İstisnaları kontrol edin: Hareket zorunlu mu, adım sayar gibi?
  • Denetleyiciyi başlangıç olarak kullanın: Otomatik araçlar koddaki hareket olay dinleyicilerini bulabilir, ama alternatifleri değerlendiremez. Bir kişi cihazda test etmelidir.

Sık yapılan hatalar

  • Yalnızca sallamayla çalışan özellikler: Aynı eylem için görünür kontrol yok.
  • Kapatılamayan hareket: Kazara tetikleyen kullanıcılar durduramaz (F106).
  • Düğmesiz eğme kontrollü gezinme: Sabitlenmiş bir cihazla imkânsızdır.
  • Ayarın kontrollerin yerine geçtiğini sanmak: İkisine de ihtiyacınız var.
  • Sistemin hareketi kapatma ayarını geçersiz kılmak: Ezmeyin.
  • Hareketi bir görevi tamamlamanın şartı yapmak: Kaydı ya da ödemeyi harekete bağlamayın.
  • Bir özelliği kolaylık için zorunlu saymak: Zorunlu, işlevin kendisinin hareket olması demektir.
  • Cihazda test etmemek: Hareket özellikleri masaüstü tarayıcıda test edilemez.

Kaynaklar

Standart sürümü: EN 301 549 V4.1.1 (2026-09), WCAG 2.2. Bu sayfa bilgilendirme amaçlıdır ve hukuki tavsiye niteliği taşımaz; bağlayıcı metin için Avrupa Erişilebilirlik Yasası'nın (Direktif (AB) 2019/882) ve EN 301 549 standardının resmî metinlerini esas alın.

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.