Web'deki içeriklere odaklanmak eskiden basitti. Fareniz vardı, hareket ettirdiniz bazen düğmelere basıyordunuz. İşte bu kadar. olmayan her şey bir şekilde emüle ediliyordu ve geliştiriciler tam olarak neye güveneceklerini biliyordu.
Fakat basitlik her zaman iyi anlamına gelmez. Zaman içinde gittikçe daha fazla her şeyin fare olmadığı (veya fare gibi davranıldığı) çok önemli değildi: Olağanüstü yaratıcı özgürlük için basınca duyarlı ve eğime duyarlı kalemler; CANNOT TRANSLATE Ancak parmaklarınızı kullanın. Bu yüzden, ihtiyacınız olan tek şey cihaz ve elinizdi. hey, neden birden fazla parmağınız yok mu?
Dokunma etkinlikleri düzenledik yardımcı olacak olsa da bunlar tamamen ayrı bir API'dir. ve bu da sizi iki ayrı etkinlik modeli kodlamaya zorlayarak hem fare hem de dokunmayı desteklemek istiyor. Chrome 55 daha yeni bir standartla sunuluyor Bu etkinlik her iki modeli birleştiriyor: işaretçi etkinlikleri.
Tek etkinlik modeli
İşaretçi etkinlikleri, Dokunma, kalemleri ve fareleri bir araya getiren, tarayıcı için işaretçi giriş modeli tek bir etkinlik grubuna böler. Örneğin:
document.addEventListener('pointermove',
ev => console.log('The pointer moved.'));
foo.addEventListener('pointerover',
ev => console.log('The pointer is now over foo.'));
Aşağıda mevcut tüm etkinliklerin listesi verilmiştir. Bu etkinlikler size aşağıdaki örneklerden faydalanabilirsiniz:
pointerover
|
İşaretçi, öğenin sınırlayıcı kutusuna girdi.
Bu işlem, fareyle üzerine gelme özelliğini destekleyen cihazlarda hemen veya
olmayan cihazlar için pointerdown etkinliği.
|
pointerenter
|
pointerover özelliğine benzer, ancak baloncuk ve herkese açık kullanıcı adı yok
alt öğeleri farklı olabilir.
Spesifikasyonla ilgili ayrıntılı bilgi.
|
pointerdown
|
İşaretçi, etkin düğme durumuna gelmiştir. Düğmelerden biri veya iletişim kurduğunuzda kullanılan giriş cihazı. |
pointermove
|
İşaretçinin konumu değişti. |
pointerup
|
İşaretçi, etkin düğme durumundan ayrıldı. |
pointercancel
|
Bir hata oluştu. Bu durum, işaretçinin daha fazla etkinlik. Bu, devam etmekte olan tüm işlemleri iptal edip nötr giriş durumuna getirin. |
pointerout
|
İşaretçi, öğenin veya ekranın sınırlayıcı kutusundan ayrıldı. Ayrıca, bir
Cihaz, fareyle üzerine gelme özelliğini desteklemiyorsa pointerup .
|
pointerleave
|
pointerout özelliğine benzer, ancak baloncuk ve herkese açık kullanıcı adı yok
alt öğeleri farklı olabilir.
Spesifikasyonla ilgili ayrıntılı bilgi.
|
gotpointercapture
|
Öğe, işaretçi yakalama aldı. |
lostpointercapture
|
Yakalanan işaretçi yayınlandı. |
Farklı giriş türleri
İşaretçi Etkinlikleri, genellikle girişten bağımsız bir şekilde kod yazmanıza olanak tanır.
Böylece farklı giriş cihazları için ayrı etkinlik işleyiciler kaydetmeniz gerekmez.
Elbette, giriş türleri arasındaki farklılıklara da dikkat etmeniz gerekir. Örneğin,
fareyle üzerine gelme kavramı geçerlidir. Farklı giriş cihazı türlerini birbirinden ayırt etmek (örneğin, her ikisine de
ayrı kodları/işlevleri kullanabilirsiniz. Ancak bunu
öğesinin pointerType
özelliğini kullanarak aynı etkinlik işleyicilerde
PointerEvent
kullanır. Örneğin, yan gezinme çekmecesi kodluyor olsaydınız
pointermove
etkinliğinizde aşağıdaki mantığı kullanın:
switch(ev.pointerType) {
case 'mouse':
// Do nothing.
break;
case 'touch':
// Allow drag gesture.
break;
case 'pen':
// Also allow drag gesture.
break;
default:
// Getting an empty string means the browser doesn't know
// what device type it is. Let's assume mouse and do nothing.
break;
}
Varsayılan işlemler
Dokunmatik özellikli tarayıcılarda, sayfayı kaydırmak, yakınlaştırmak veya yenilemek için belirli hareketler kullanılır.
Dokunma etkinlikleri durumunda, bu varsayılan ayar olduğunda etkinlikleri almaya devam edersiniz
işlemler gerçekleşiyor. Örneğin, kullanıcı sayfayı kaydırırken touchmove
tetiklenmeye devam edecek.
İşaretçi etkinlikleri sayesinde, kaydırma veya yakınlaştırma gibi varsayılan bir işlem tetiklendiğinde,
Tarayıcının şunları yaptığını bildiren bir pointercancel
etkinliği alacaksınız:
kontrol edebilirsiniz. Örneğin:
document.addEventListener('pointercancel',
ev => console.log('Go home, the browser is in charge now.'));
Yerleşik hız: Bu model varsayılan olarak daha iyi performansa olanak tanır. daha fazla dönüşüm elde etmek için pasif etkinlik işleyiciler elde etmenize yardımcı olur.
Tarayıcının kontrolü ele geçirmesini engellemek için
touch-action
CSS mülkü. Bir öğede none
değerine ayarlanırsa tüm öğeler devre dışı bırakılır
tarayıcı tarafından tanımlanan işlemlerin bu öğe üzerinden başlatılmasını sağlar. Ama pek çok farklı
izin vermek için pan-x
gibi daha ayrıntılı kontrol için diğer değerler
ancak y eksenindeki harekete tepki vermesi için tarayıcının bunu yapması gerekir. Chrome 55 sürümü
aşağıdaki değerleri destekler:
auto
|
Varsayılan; tarayıcı, varsayılan herhangi bir işlemi gerçekleştirebilir. |
none
|
Tarayıcının varsayılan işlem yapmasına izin verilmez. |
pan-x
|
Tarayıcının yalnızca varsayılan yatay kaydırma işlemini gerçekleştirmesi gerekir. |
pan-y
|
Tarayıcının yalnızca dikey kaydırma varsayılan işlemini gerçekleştirmesi gerekir. |
pan-left
|
Tarayıcının yalnızca yatay kaydırma varsayılan işlemini gerçekleştirmesi gerekir. kaydırmak için de kullanılır. |
pan-right
|
Tarayıcının yalnızca yatay kaydırma varsayılan işlemini gerçekleştirmesi gerekir. sağa kaydırmasını sağlar. |
pan-up
|
Tarayıcının yalnızca dikey kaydırma varsayılan işlemini gerçekleştirmesi gerekir. ve yalnızca sayfayı yukarı kaydırmak için kullanılır. |
pan-down
|
Tarayıcının yalnızca dikey kaydırma varsayılan işlemini gerçekleştirmesi gerekir. ve yalnızca sayfayı aşağı kaydırır. |
manipulation
|
Tarayıcının yalnızca kaydırma ve yakınlaştırma işlemleri yapmasına izin verilir. |
İşaretçi yakalama
Bozuk bir mouseup
için hata ayıklayarak sinir bozucu bir saat harcadınız
kullanıcının düğmeyi bırakması olduğunu fark edinceye kadar
tıklama hedefinizin dışında mı? Cevabınız hayır mı? Tamam, belki yalnızca bendim.
Yine de şu ana kadar bu sorunu çözmek için gerçekten iyi bir yol yoktu. Tabii ki,
dokümanda mouseup
işleyicisini ayarlayıp bazı durumlarda
uygulamanızı indirin. En temiz çözüm bu değil ama
özellikle de bir web bileşeni oluşturuyor ve her şeyin düzgün ve güzel
izole.
İşaretçi etkinlikleri çok daha iyi bir çözüm sunar: İşaretçiyi yakalayabilirsiniz.
olduğundan emin olmak için pointerup
etkinliği (veya
arkadaşlar).
const foo = document.querySelector('#foo');
foo.addEventListener('pointerdown', ev => {
console.log('Button down, capturing!');
// Every pointer has an ID, which you can read from the event.
foo.setPointerCapture(ev.pointerId);
});
foo.addEventListener('pointerup',
ev => console.log('Button up. Every time!'));
Tarayıcı desteği
İşaretçi Etkinlikleri, yazıldığı sırada Internet Explorer 11'de desteklenir. Microsoft Edge, Chrome ve Opera'dır ve Firefox'ta kısmen desteklenir. Şunları yapabilirsiniz: Güncel listeyi caniuse.com'da bulabilirsiniz.
İşaretçi Etkinlikleri çoklu dolgusunu gibi sorular sorabilirsiniz. Alternatif olarak, çalışma zamanında tarayıcı desteği olup olmadığını kontrol etmek basittir:
if (window.PointerEvent) {
// Yay, we can use pointer events!
} else {
// Back to mouse and touch events, I guess.
}
İşaretçi etkinlikleri, ilerlemeyi artırmak için mükemmel bir adaydır.
yukarıdaki kontrolü yapmak için başlatma yöntemlerinizi değiştirin, işaretçi etkinliği ekleyin
işleyicileri olup olmadığını kontrol edin ve fare/dokunma etkinlik işleyicileriniziif
else
blok.
Siz de onları deneyin ve düşüncelerinizi bizimle paylaşın.