2010-05-26 5 views
45

Nel tentativo di seguire le best practice, stiamo tentando di utilizzare gli eventi JavaScript/jQuery appropriati in base al dispositivo utilizzato. Ad esempio, stiamo creando un sito per dispositivi mobili con un tag che avrà un evento onclick o touch. Nel caso di un iPhone, vorremmo utilizzare l'evento "touchstart". Vorremmo testare se il loro dispositivo supporta "touchstart" prima di associare il gestore all'oggetto. In caso contrario, vincoleremo "onclick".Come controllare il browser per il supporto touchstart usando JS/jQuery?

Qual è il modo migliore per farlo?

risposta

81

È possibile rilevare se l'evento è sostenuto da:

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

dare uno sguardo a questo articolo:

La funzione isEventSupported pubblicato lì, è veramente buono a rilevare una vasta gamma di eventi, ed è cross-browser.

+1

Sono una specie di tentata di +1 questo, ma so che Firefox tornerà 'false' qui per le ragioni sbagliate. Firefox restituisce false per tutti gli eventi controllati in questo modo (lo so, è una di quelle rare situazioni in cui Fx fa schifo). L'articolo va comunque in questo, quindi ottieni la tua risorsa +1 ;-) –

+0

ottima. Grazie per il rapido aiuto! – Alex

+15

Questo rileva solo se il ** browser ** supporta gli eventi di tocco, non determina se il ** dispositivo ** li supporta. Prova questo in Chrome su un dispositivo non touch. – RobG

3

si potrebbe verificare se typeof document.body.ontouchstart == "undefined" a ripiegare a normali eventi DOM

1

ho fatto una dimostrazione completa che funziona in tutti i browser con il codice sorgente completo della soluzione di questo problema: Detect touch screen devices in Javascript.

+0

Ho pensato che un esempio abbastanza decente. grazie per la condivisione. – zipzit

+0

L'esempio produce molti falsi positivi. Esistono molti browser che implementano l'API Touch di default indipendentemente dal fatto che un dispositivo touch sia effettivamente collegato al sistema. – Nilpo

+0

@Nilpo Forse hai ragione. Questo post è stato scritto più di sette anni fa. –

11

Utilizzare questo codice per rilevare se il dispositivo supporta il tocco.

funzionare anche per Windows 8, che utilizza IE10 evento 'MSPointerDown' invece di '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

Perché non semplificarlo come monolinea? '' var supportsTouch = ('ontouchstart' nella finestra || window.navigator.msPointerEnabled) '' –

+0

Sfortunatamente, questo non funziona per es. 11 su Windows 10 su laptop HP (senza touchscreen) per me. Dice erroneamente supportsTouch = true. ma quando lego qualcosa a "touchstart", non viene mai eseguito. In qualche modo intorno a questo? –

+0

Questo è semplicemente sbagliato.L'API dei puntatori si applica a qualcosa di più dei semplici dispositivi touch. Si applica a praticamente ogni dispositivo di input. – Nilpo