Giriş cihazı özellikleri

Chrome 47'nin, kullanıcıların sitenizle nasıl etkileşimde bulunduğunu daha kolay anlamanızı sağlayan yeni bir özelliği var: InputDeviceCapabilities! Biraz geriye gidelim ve bunun neden önemli olduğunu öğrenelim.

DOM giriş etkinlikleri, fiziksel cihaz girişine (ör. click etkinlikleri fare, dokunmatik ekran veya klavye ile tetiklenebilir). Ancak bir sorun var: Bir etkinlikten sorumlu fiziksel cihazın bilgilerini elde etmenin basit bir yöntemi yok.

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

Bu durum, hem fare hem de dokunmatik girişi destekleyen geliştiriciler için sorunlara yol açmaktadır. Bir mousedown etkinliğinin gerçekten fareden gelen yeni bir girişi mi temsil ettiğini yoksa sadece önceden işlenmiş bir dokunmatik başlatma etkinliğine yönelik bir uyumluluk etkinliği mi olduğunu 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.
Nesnenin firesTouchEvents özelliği, etkinliğin kullanıcı işlemi tarafından nasıl oluşturulduğuna bağlı olarak true veya false olarak ayarlanır.

Sorulması gereken soru şudur: Bu, nerede kullanılmalı?

İşaretçi Etkinlikleri dışında, birçok geliştirici bugün dokunmatik katmandaki etkileşim mantığını ele alarak, "sahte" fare etkinlikleri oluşturmaktan kaçınmak için Varsayılan'ı önlüyor.Bu tasarım birçok senaryoda iyi sonuç veriyor ve InputDeviceCapabilities'ten yararlanmak için değiştirilmesi gerekmez.

Ancak bazı senaryolarda dokunma etkinliğinde preventDefault yapmayı gerçekten istemezsiniz. Örneğin, yine de dokunma etkinliğinde "tıklama" etkinliklerinin gönderilip odağın değiştirilmesini istersiniz. Bu tür durumlarda MouseEvent.sourceCapabilities.firesTouchEvents özelliğinde tutulan bilgiler, dokunma ve fare tabanlı etkinliklerin mantığını İşaretçi Etkinlikleri ile mantığı yönetmenize benzer bir modelde birleştirmeye başlamanıza olanak tanır. Diğer bir deyişle, etkileşim mantığını yöneten ve geliştiricilere İşaretçi Etkinlikleri'ni destekleyen ve desteklemeyen tarayıcılar arasında mantığı paylaşmak için daha basit bir yol sunan tek bir kod grubunuz olabilir.

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

Neyse ki bu oyun Rick Byers tarafından Polyfilled olarak çoğu platformda kullanılabilir.

Günümüzde bu API, minimum düzeydedir ve dokunma etkinliklerinden türetilen fare etkinliklerini belirlemeyle ilgili belirli bir sorunu çözmeye odaklanmıştır. InputDeviceCapabilities örneğini örneklendirmek de mümkündür; ancak yalnızca firesTouchEvents içerir. Gelecekte, bir kullanıcının sistemindeki tüm giriş cihazları hakkında daha fazla bilgi edinebilmeniz için bu özelliğin genişletilmesi beklenmektedir. Kullanım alanları hakkındaki geri bildiriminizi öğrenmek isteriz.