2012-09-24 13 views
10

Solía ​​depender de¿Cómo probar eventos táctiles ahora que Chrome no supera las pruebas estándar?

var supportsTouch = 'ontouchstart' in document; 

para la prueba de soporte táctil en los navegadores móviles y de escritorio. En base a esa prueba, vinculo eventListeners para hacer clic o eventos táctiles. Esto funciona bien en TODAS las versiones actuales del navegador, pero la última actualización de Chrome Canary (24.0.1275.0 canary) y, por supuesto, la versión DEV no pasa esta prueba.

Comprobé la prueba modernizr actual pero también devuelve un falso positivo, lo que significa que chrome admite el toque aunque la función esté desactivada.

Mi solución actual es probar primero cualquier tipo de navegador móvil y solo si eso arroja resultados positivos usa la prueba anterior para verificar el tacto. Lo malo de esto es que no se puede usar la práctica opción de "emular eventos táctiles" en las herramientas de desarrollo de Chrome. Ideas?

+0

¿Dice que devuelve falso cuando el navegador admite el toque o que devuelve verdadero cuando el navegador admite el tacto pero es posible que no haya hardware táctil? –

+0

@SamuelEdwinWard Aclaré la pregunta –

+0

Supongo que solo vinculando ambos eventos no funcionará. –

Respuesta

16

Respuesta corta: Tu prueba volverá a funcionar ahora en cualquier momento de Chrome. Pero probablemente no para siempre

Respuesta larga:

El equipo de Chrome quería añadir eventos táctiles en los navegadores de escritorio, debido al creciente número de escritorios con pantallas táctiles con capacidad. Entonces lo hicieron, probablemente alrededor de 24.0 Canary. Luego descubrieron que mucha gente estaba haciendo lo que está haciendo para "detectar dispositivos táctiles". El problema con esto es , solo está probando si el explorador admite eventos táctiles, no el dispositivo (lo mismo ocurre con Modernizr.touch). Más específicamente, solo el W3C/Apple TouchEvents API.

No querían enviar diferentes versiones de Chrome para táctil/no táctil, por lo que lo hicieron para que solo activen las API táctiles si detectan un dispositivo táctil al inicio (se discute aquí: http://code.google.com/p/chromium/issues/detail?id=152149).

Por lo tanto, ahora su prueba funcionará de nuevo ... PERO - si desea probar su futuro, puede cambiar su enfoque. He aquí por qué:

  1. No todos los navegadores realizarán este cambio de Chrome.

  2. La capacidad táctil se está convirtiendo en una función dinámica: con Microsoft Surface, etc., puede desconectarse del teclado y el mouse y tocar solo, los usuarios pueden tener monitores táctiles conectados mediante conmutadores KVM que no se detectarán al inicio, etc. Los proveedores del navegador no quieren que las API aparezcan y desaparezcan, sería una pesadilla, por lo que en algún momento los chicos de Chrome probablemente habilitarán permanentemente las API de TouchEvents en todos los dispositivos. Esa prueba comenzará a arrojar "falsos positivos" de nuevo.

En cambio, mira el PointerEvents API, lo que da un interfaz de eventos común para las entradas de ratón, táctil y el lápiz. Si está pensando en hacer botones más grandes para las interfaces táctiles, etc, hay una especificación pointer media query también (y una hover uno), que aparecerá en los navegadores pronto - esta diferencia entre los diferentes precisiones de dispositivos de entrada - none/coarse/fine - y ser dinámico le permitirá ajustar sus estilos en función de los dispositivos de puntero conectados, ya que están conectados/desconectados.Muy genial.

Modernizr v3.0 (dejando caer dentro de las próximas semanas) tendrá un par de cambios relevantes aquí:

  • Un detectar para se añade
  • Modernizr.touch se está cambiando el nombre a una mejor Modernizr.touchevents la API PointerEvents representan lo que significa

Así que me gustaría considerar el uso de PointerEvents si está disponible (que ya está en IE10), cayendo de nuevo a un interruptor Modernizr.touchevents si no.

+1

sí, conozco el informe de errores de cromo, lo escribí yo mismo. gracias por tomarse el tiempo para escribir esto ya que en realidad no compruebo los cambios en el último mes o menos –

+0

Pasé unas horas tratando de arreglar mi reproductor de video HTML5 para una tableta de superficie + IE10 pero los eventos del puntero no funcionan como esperado. Todo está bien, siempre y cuando se use el mouse, pero los toques no se reconocen como se esperaba ... Parece que IE10 no puede lidiar con los toques tan elegantemente como uno podría esperar. Volviendo a la vieja sensación de IE6 en parte:/ –

+0

Espero que esto mejore ... Microsoft realmente está reforzando sus tecnologías táctiles, incluyendo pantallas colaborativas que pueden manejar más de 80 puntos de contacto (por alguna razón). Estoy seguro de que saben que simplemente no se lavará si no está a la altura. –

Cuestiones relacionadas