Determinar y vincular eventos de clic o "toque"
Estoy usando el código a continuación para enlazar eventos "click" o "touchstart" (usando jQuery on(eventType, function() { ... })
).
var what = (navigator.userAgent.match(/iPad/i)) ? 'touchstart' : 'click';
Mas tarde:
- Necesita ayuda con el selector de colores para los elementos de ListView seleccionados
- ZXing Android Generar código de barras 1D
- ¿Es posible abrir mi aplicación a través de sms de la bandeja de entrada?
- ¿Hay alguna manera de usar Webkit Inspector Remote Debugging en iPad?
- ¿Cómo puedo encontrar la ventana virtual / ancho de pantalla con Javascript?
$foo.on(what, function() { ... });
… que funciona muy bien para iPad y "todo lo demás", pero me preocupa que el código anterior tiene "visión de túnel IPAD" …
Mis preguntas):
¿Todos los demás dispositivos (por ejemplo, tabletas de Android) también tienen el mismo nombre de eventos "touchstart"? Si es así, ¿cómo puedo mejorar el código anterior para que pueda tener en cuenta esos tipos de eventos?
En otras palabras, ¿cómo puedo tener en cuenta una gama más amplia de dispositivos táctiles en el código anterior (no sólo en el iPad)?
EDIT # 1
¿Qué piensan ustedes sobre esto:
var foo = ('ontouchstart' in window) ? 'touchstart' : ((window.DocumentTouch && document instanceof DocumentTouch) ? 'tap' : 'click');
Nota: La mayor parte de la lógica anterior es de Modernizr aquí .
Lo anterior parece funcionar para Firefox / iPad … No tengo mucho más para probar en este momento.
Lo que me gusta de lo anterior es que no estoy respirando. 🙂
¿Es un buen valor predeterminado para todos los demás dispositivos táctiles?
EDIT # 2
Algunos datos interesantes aquí , que enlaza con esto:
Creación de botones rápidos para aplicaciones web móviles
No es una respuesta directa realmente, pero da muchos detalles de la situación que los desarrolladores enfrentan cuando se enfrentan a eventos relacionados con el clic para múltiples plataformas y dispositivos.
EDIT # 3
Una buena información aquí también:
Eventos de touch de Android y iPhone
Las versiones para Android y iPhone de WebKit tienen algunos eventos de toque en común:
touchstart - triggered when a touch is initiated. Mouse equivalent - mouseDown touchmove - triggered when a touch moves. Mouse equivalent - mouseMove touchend - triggered when a touch ends. Mouse equivalent - mouseUp. This one is a bit special on the iPhone - see below touchcancel - bit of a mystery
Después de leer eso, creo que voy a cambiar el código de arriba a esto:
var foo = (('ontouchstart' in window) || (window.DocumentTouch && document instanceof DocumentTouch)) ? 'touchstart' : 'click';
Cuando primero le pregunté a mi pregunta – no tener acceso a nada más que un iPad / iPhone – asumí que touchstart
era un evento específico de iOS; Ahora se ve como touchstart
y click
cubrirá la mayoría, si no todas, de las bases de los dispositivos táctiles.
Actualización de agosto de 2014:
Si es de alguna ayuda, he publicado algunas clases de utilidad aquí:
-
Mhulse / no-x.js :
[No-js] [no-touch] Utilidades JavaScript para poner en plantillas HTML que añadir
js
otouch
clases para su uso en CSS y / o JS.
- ¿Cuál es la diferencia entre html5 y xamarin?
- ¿Cómo XOR los valores de píxeles de dos mapas de bits juntos?
- Iniciar el entorno de desarrollo de rails en android
- ¿Cómo interactuar con el menú USSD?
- Mostrar el diálogo "Abrir con" en Android
- ¿Cuáles son las limitaciones para el desarrollo de aplicaciones en el fuego en llamas?
- Abra la aplicación google maps desde un navegador con la ubicación de inicio predeterminada en android y iphone
- Vista flotante de Android (sobre otras vistas)
Tanto iOS como Android tienen eventos táctiles, pero Windows utiliza eventos MSPointer en IE. Si desea una solución entre dispositivos, intente pointer.js o aprenda de ella:
Yo sugeriría fuertemente contra el uso de UA con el fin de determinar si estás en contacto con el medio ambiente.
Utilice Modernizr en lugar de otro: http://modernizr.com/ El código abajo reconocería cualquier cosa menos el teléfono 7 de las ventanas porque el teléfono 7 de Windows no dispara los acontecimientos regulares del tacto del browser. Sin embargo WP8 probablemente sería reconocido correctamente.
if (Modernizr.touch){ // bind to touchstart, touchmove, etc and watch `event.streamId` } else { // bind to normal click, mousemove, etc }
Esto puede funcionar para usted:
var clickEvent = ((document.ontouchstart!==null)?'click':'touchstart'); $("#mylink").on(clickEvent, myClickHandler);
- Cómo cambiar el color de fondo alrededor de un DialogFragment?
- Error al guardar el estado: objetivo no en el gestor de fragmentos (setTargetFragment)