Entendendo eventos de toque

Estou tentando fazer com que algumas das minhas bibliotecas funcionem com dispositivos de toque, mas estou tendo dificuldades para descobrir como elas são suportadas e como funcionam.

Basicamente, existem5 eventos de toque, mas parece que há consenso entre os navegadores móveis apenas notouchstart evento (duh). Eu criei umviolino como um caso de teste.

Eu testei isso no meu Galaxy Note com Android 4 a bordo, mas você pode verificar o link com um navegador de desktop também.

O objetivo é tentar descobrir como lidar com torneiras, torneiras duplas e torneiras longas. Nada chique.

Basicamente, isso é o que acontece:

oNavegador de ações Android não dispara eventos de toque. Ele apenas tenta emular cliques do mouse com toques, disparandomousedown, mouseup eclick eventos consecutivamente, mas os toques duplos aumentam e diminuem a página.

cromada para Android aciona o evento touchstart quando o dedo toca na tela. Se for liberado em breve, ele disparamousedown, mouseup, touchend e finalmenteclick eventos.

No caso detoque longo, depois de meio segundo, ele disparamousedown emouseupetouchend quando o dedo é levantado, semclick evento no final.

Se vocêsmova seu dedo, dispara umtouchmove evento um par de vezes, então ele dispara umtouchcancel evento, e nada acontece depois, nem mesmo umtouchend evento ao levantar o dedo.

A toque duplo aciona os recursos de zoom in / out, mas o evento dispara o combotouchstart-touchevent duas vezes, sem eventos de mouse disparados.

Raposa de fogo para Android corretamente dispara otouchstart evento, e em caso de toques curtosmousedown, mouseup, touchend eclick depois.

No caso detoque longo, ele atiramousedown, mouseup e finalmentetouchend eventos. É o mesmo do Chrome para essas coisas.

Mas se vocêmova seu dedo, se fogotouchmove continuamente (como se pode esperar), mas nãonão disparar otouchleave evento quando o dedo deixa o elemento com o ouvinte de evento e não disparatouchcancel evento quando o dedo sai da janela de visualização do navegador.

Paratorneiras duplas, se comporta como o Chrome.

Opera Mobile faz o mesmo do Chrome e do Firefox para um toque curto, mas em caso de pressionamento longo ativa algum tipo de recurso de compartilhamento que eu realmente quero desabilitar. Se você mover seu dedo ou tocar duas vezes, ele se comportará como o Firefox.

Beta do Chrome faz o habitual para torneiras curtas, mas no caso de torneiras longas não disparamouseup mais, apenastouchstart, entãomousedown depois de meio segundo, entãotouchend quando o dedo é levantado. Quando o dedo é movido, agora ele se comporta como o Firefox e o Opera Mobile.

No caso detorneiras duplas, não dispara eventos de toqueao diminuir o zoom, mas apenas ao aumentar o zoom.

O Chrome beta mostra o comportamento mais estranho, mas não posso reclamar, pois é uma versão beta.

A questão é: existe uma maneira simples de tentar detectar toques curtos, toques longos e toques duplos nos navegadores mais comuns de dispositivos de toque?

Pena que não posso testá-lo em dispositivos iOS com Safari, ou IE para Windows Phone 7 / Phone 8 / RT, mas se algum de vocês puder, seu feedback será muito apreciado.

questionAnswers(4)

yourAnswerToTheQuestion