2010-05-26 180 views
45

爲了遵循最佳實踐,我們嘗試根據您使用的設備使用正確的JavaScript/jQuery事件。例如,我們正在構建一個移動網站,其中包含一個標記,其中包含onclick或touch事件。在iPhone的情況下,我們想使用「touchstart」事件。我們希望測試他們的設備是否支持「touchstart」,然後將該處理程序綁定到該對象。如果沒有,那麼我們將綁定「onclick」。如何使用JS/jQuery檢查瀏覽器是否支持touchstart?

這樣做的最好方法是什麼?

回答

81

如果該事件由支持您可以檢測:

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

給看看這篇文章:

發表那裏isEventSupported功能,纔是真的好在檢測各種各樣的事件時,它是跨瀏覽器的。

+1

我有點動心+1這一點,但我知道,Firefox將返回'FALSE'這裏「MSPointerDown」事件錯誤的原因。對於以這種方式檢查的所有事件,Firefox都會返回false(我知道,這是Fx很糟糕的罕見情況之一)。文章確實進入了,所以你得到你的+1 ;-) – 2010-05-26 19:26:04

+0

偉大的資源。感謝您的快速幫助! – Alex 2010-05-26 20:47:35

+15

這隻會檢測**瀏覽器**是否支持觸摸事件,並不能確定**設備**是否支持它們。在非觸控設備上使用Chrome進行試用。 – RobG 2012-08-14 04:13:34

3

您可以檢查是否typeof document.body.ontouchstart == "undefined"回落到正常的DOM事件

1

我做了充分的筆畫演示,在每一個瀏覽器這個問題的解決方案的完整源代碼的工作:Detect touch screen devices in Javascript

+0

我認爲這是一個相當不錯的例子。感謝分享。 – zipzit 2014-07-01 19:56:30

+0

你的例子會產生很多誤報。有許多瀏覽器默認實現Touch API,無論觸摸設備是否實際連接到系統。 – Nilpo 2018-02-18 04:03:56

+0

@Nilpo也許你是對的。這篇文章是七年前寫的。 – 2018-03-02 17:31:40

11

使用此代碼來檢測設備是否支持觸摸。

也可在Windows 8 IE10它使用的不是「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

爲什麼不把它簡化爲單行? ''var supportsTouch =('ontouchstart'in window || window.navigator.msPointerEnabled)'' – 2017-01-10 12:35:38

+0

不幸的是,這對於HP筆記本電腦(不帶觸摸屏)的Windows 10上的ie 11無效。它錯誤地說supportsTouch = true。但是當我將某些東西綁定到「touchstart」時,它永遠不會被執行。任何方式在這個? – 2017-02-08 21:53:13

+0

這是錯的。指針API不僅適用於觸摸設備。它適用於每個幾乎每個輸入設備。 – Nilpo 2018-02-18 04:02:09

相關問題