Giriş cihazı özellikleri

Chrome 47'de, kullanıcıların sitenizle nasıl etkileşimde bulunduğunu anlamanızı kolaylaştıran yeni bir özellik bulunuyor: InputDeviceCapabilities. Biraz geri çekilip bunun neden önemli olduğunu öğrenelim.

DOM giriş etkinlikleri, düşük düzey giriş etkinliklerinin üzerinde bir soyutlamadır ve fiziksel cihaz girişine (ör. click etkinlikleri fare, dokunmatik ekran veya klavye ile tetiklenebilir). Ancak bir sorun var: Bir etkinlikten sorumlu fiziksel cihazın ayrıntılarını elde etmenin basit bir yöntemi yok.

Ayrıca, belirli giriş türleri uyumluluk nedeniyle başka "sahte" DOM giriş etkinlikleri oluşturabilir. Bu tür sahte DOM etkinliklerinden biri, kullanıcı dokunmatik ekrana (ör. cep telefonunda) dokunduğunda gerçekleşir. Bu etkinlik yalnızca dokunma etkinliklerini değil, uyumluluk nedeniyle fare etkinliklerini de tetikler.

Bu durum, geliştiricilerin hem fare hem de dokunma girişini desteklerken sorun yaşamasına neden olur. Bir mousedown etkinliğinin gerçekten fareden gelen yeni bir girişi mi yoksa daha önce işlenmiş bir dokunma başlangıcı etkinliği için uyumluluk etkinliği mi temsil ettiğini bilmek zordur.

Yeni InputDeviceCapabilities API, UIEvent'teki bir sourceCapabilities nesnesi aracılığıyla giriş etkinliklerinin temel kaynakları hakkında ayrıntılı bilgi sağlar.
Öğede, etkinliğin kullanıcı işlemi tarafından nasıl oluşturulduğuna bağlı olarak true veya false olarak ayarlanmış bir firesTouchEvents mülkü bulunur.

Asıl soru şudur: Bu nerede kullanılmalıdır?

Günümüzde birçok geliştirici, işaretçi etkinliklerinin dışındaki etkileşim mantığını dokunma katmanında ele alarak varsayılan olarak "sahte" fare etkinlikleri oluşturulmasını önler.Bu tasarım birçok senaryoda iyi çalışır ve InputDeviceCapabilities'ten yararlanmak için değiştirilmesi gerekmez.

Ancak bazı senaryolarda dokunma etkinliğinin preventDefault işlevini gerçekten kullanmak istemezsiniz. Örneğin, dokunma işlemlerinin "tıklama" etkinlikleri göndermesini ve odağı değiştirmesini istemeye devam edebilirsiniz. Bu durumlarda, MouseEvent.sourceCapabilities.firesTouchEvents mülkünde tutulan bilgiler, dokunma ve fare tabanlı etkinliklerin mantığını, işaretçi etkinliklerinde mantığı yönettiğiniz şekilde benzer bir modelde birleştirmeye başlamanıza olanak tanır. Yani, etkileşim mantığını yöneten ve geliştiricilere işaretçi etkinliklerini destekleyen ve desteklemeyen tarayıcılar arasında mantığı paylaşmanın daha basit bir yolunu sunan tek bir kod grubuna sahip olabilirsiniz.

function addMouseEventListener(target, type, handler, capture) {  
    target.addEventListener(type, function(e) {  
    if (e.sourceCapabilities.firesTouchEvents)  
        return false;  
    return handler(e);  
    }, capture);  
}

Neyse ki Rick Byers bu özelliği çoğu platformda kullanabilmeniz için Polyfilled yaptı.

Şu anda bu API, dokunma etkinliklerinden türetilen fare etkinliklerini tanımlamayla ilgili belirli bir sorunu çözmeye odaklanan, minimum düzeyde bir API'dir. InputDeviceCapabilities örneği oluşturmak da mümkündür ancak bu örnek yalnızca firesTouchEvents içerir. Gelecekte, kullanıcının sistemindeki tüm giriş cihazları hakkında daha fazla bilgi edinmenizi sağlamak için bu özelliğin genişletilmesi bekleniyor. Kullanım alanlarıyla ilgili geri bildirimlerinizi öğrenmekten memnuniyet duyarız.