2010-05-26 183 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

相关问题