2010-05-26 11 views
45

En un intento de seguir las mejores prácticas, estamos tratando de utilizar los eventos adecuados de JavaScript/jQuery según el dispositivo que esté utilizando. Por ejemplo, estamos creando un sitio móvil que tiene una etiqueta que tendrá un evento onclick o touch. En el caso de un iPhone, nos gustaría usar el evento "touchstart". Nos gustaría probar si su dispositivo es compatible con "touchstart" antes de vincular ese controlador al objeto. Si no es así, enlazaremos "onclick" en su lugar.¿Cómo verificar el navegador para el soporte de inicio con JS/jQuery?

¿Cuál es la mejor manera de hacerlo?

Respuesta

81

Puede detectar si el evento es apoyado por:

if ('ontouchstart' in document.documentElement) { 
    //... 
} 

Dale un vistazo a este artículo:

La función isEventSupported publicada allí, es realmente bueno para detectar una gran variedad de eventos, y es un navegador cruzado.

+1

Estoy como tentado a 1 esto, pero sé que Firefox devolverá FALSE aquí para las razones equivocadas. Firefox devuelve falso para todos los eventos marcados de esta manera (lo sé, es una de esas situaciones raras donde Fx apesta). El artículo entra en eso, así que obtienes tu +1 ;-) –

+0

gran recurso. ¡Gracias por la rápida ayuda! – Alex

+15

Esto solo detecta si el ** navegador ** admite eventos táctiles, pero no determina si el ** dispositivo ** los admite. Prueba esto en Chrome en un dispositivo sin contacto. – RobG

3

se puede comprobar si typeof document.body.ontouchstart == "undefined" a caer de nuevo a eventos DOM normales

1

hice una demostración completa que funciona en todos los navegadores con el código fuente completo de la solución de este problema: Detect touch screen devices in Javascript.

+0

Pensé que era un buen ejemplo. gracias por compartir. – zipzit

+0

Su ejemplo produce muchos falsos positivos. Hay muchos navegadores que implementan la API táctil de forma predeterminada, ya sea que los dispositivos táctiles estén o no conectados al sistema. – Nilpo

+0

@Nilpo Quizás tengas razón. Esta publicación fue escrita hace más de siete años. –

11

Utilice este código para detectar si el dispositivo admite el toque.

también trabajar para Windows 8 IE10 que utiliza evento 'MSPointerDown' en lugar de 'touchmove'

var supportsTouch = false; 
if ('ontouchstart' in window) { 
    //iOS & android 
    supportsTouch = true; 

} else if(window.navigator.msPointerEnabled) { 

    // Windows 
    // To test for touch capable hardware 
    if(navigator.msMaxTouchPoints) { 
     supportsTouch = true; 
    } 

} 
+3

¿Por qué no simplificarlo como un trazador de líneas? '' var supportsTouch = ('ontouchstart' en la ventana || window.navigator.msPointerEnabled) '' –

+0

Desafortunadamente, esto no funciona para, por ejemplo, 11 en Windows 10 en la computadora portátil HP (sin pantalla táctil) para mí. Dice erróneamente supportsTouch = verdadero. pero cuando enlazo algo a "touchstart", nunca se ejecuta. De cualquier forma alrededor de esto? –

+0

Esto es simplemente incorrecto.La API de punteros se aplica a algo más que a los dispositivos táctiles. Se aplica a prácticamente todos los dispositivos de entrada. – Nilpo

Cuestiones relacionadas