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. Bir adım 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 etmek için basit bir yöntem 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.
Öğe, 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üne sahiptir.

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 "sahte" fare etkinlikleri oluşturmak için varsayılan ayarların kullanılmasını engeller.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 değerini ayarlamak istemezsiniz. Örneğin, dokunma işlemlerinin "tıklama" etkinlikleri göndermesini ve odağı değiştirmesini istiyorsanız. 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ı ile ilgili geri bildirimlerinizi öğrenmekten memnuniyet duyarız.