Zrozumienie zdarzeń dotykowych
Staram się, aby niektóre z moich bibliotek działały z urządzeniami dotykowymi, ale trudno mi się dowiedzieć, w jaki sposób są obsługiwane i jak działają.
Zasadniczo są5 wydarzeń dotykowych, ale wydaje się, że wśród przeglądarek mobilnych istnieje zgoda tylko natouchstart
wydarzenie (duh). Stworzyłemskrzypce jako przypadek testowy.
Przetestowałem to na mojej Galaxy Note z Androidem 4 na pokładzie, ale możesz również sprawdzić łącze za pomocą przeglądarki na komputerze.
Celem jest próba określenia sposobu obsługi kranów, podwójnych kranów i długich kranów. Nic fajnego.
Zasadniczo tak się dzieje:
ThePrzeglądarka zapasów na Androida nie uruchamia zdarzeń dotykowych. Po prostu próbuje emulować kliknięcia myszką z kranami, strzelającmousedown
, mouseup
iclick
zdarzenia kolejno, ale podwójne stuknięcia po prostu przybliżają i oddalają stronę.
Chrom dla Androida uruchamia zdarzenie touchstart, gdy palec dotyka ekranu. Jeśli zostanie wkrótce wypuszczony, wtedy strzelamousedown
, mouseup
, touchend
i w końcuclick
wydarzenia.
W przypadkudługi kran, po około pół sekundy strzelamousedown
imouseup
, itouchend
kiedy palec jest podniesiony, bezclick
wydarzenie na końcu.
Jeśli typrzesuń palec, wystrzeliwujetouchmove
zdarzenie kilka razy, a następnie wystrzeliwujetouchcancel
zdarzenie, a potem nic się nie dzieje, nawet atouchend
zdarzenie podczas podnoszenia palca.
A podwójne wciśnięcie uruchamia funkcje powiększania / pomniejszania, ale pod względem zdarzeń uruchamia kombinacjętouchstart
-touchevent
dwa razy, bez wyzwalanych zdarzeń myszy.
Firefox dla Androida poprawnie odpalatouchstart
zdarzenie, aw przypadku krótkich pożarówmousedown
, mouseup
, touchend
iclick
potem.
W przypadkudługi kran, strzelamousedown
, mouseup
i w końcutouchend
wydarzenia. To samo dotyczy Chrome dla tych rzeczy.
Ale jeśli typrzesuń palec, jeśli pożarytouchmove
ciągle (jak można się spodziewać), ale tak nie jestnie strzelaćtouchleave
zdarzenie, gdy palec opuszcza element ze słuchaczem zdarzenia i nie odpalatouchcancel
zdarzenie, gdy palec wychodzi z okienka przeglądarki.
Dlapodwójne stuknięcia, zachowuje się tak jak Chrome.
Opera Mobile robi to samo z Chrome i Firefoxem przez krótki czas, ale w przypadku długiego naciśnięcia aktywuje jakąś funkcję udostępniania, którą naprawdę chcę wyłączyć. Jeśli poruszysz palcem lub stukniesz dwukrotnie, zachowuje się tak jak Firefox.
Chrome beta robi to zwykle przy krótkich dotknięciach, ale w przypadku długich uderzeń nie odpalamouseup
wydarzenie już po prostutouchstart
, następniemousedown
po pół sekundytouchend
kiedy palec zostanie podniesiony. Gdy palec zostanie przeniesiony, teraz zachowuje się jak Firefox i Opera Mobile.
W przypadkupodwójne stuknięcia, nie wystrzeliwuje zdarzeń dotykowychpodczas oddalania, ale tylko podczas powiększania.
Beta Chrome pokazuje dziwne zachowanie, ale nie mogę narzekać, ponieważ jest to wersja beta.
Pytanie brzmi: czy istnieje prosty i skuteczny sposób wykrywania krótkich stuknięć, długich stuknięć i podwójnych stuknięć w najpopularniejszych przeglądarkach urządzeń dotykowych?
Szkoda, że nie mogę go przetestować na urządzeniach z systemem iOS za pomocą Safari lub IE dla Windows Phone 7 / Phone 8 / RT, ale jeśli niektórzy z was mogą, twoja opinia będzie bardzo mile widziana.