如何使用 JS/jQuery 检查浏览器是否支持 touchstart?

IT技术 javascript jquery iphone mobile unobtrusive-javascript
2021-03-17 12:24:58

为了遵循最佳实践,我们尝试根据您使用的设备使用正确的 JavaScript/jQuery 事件。例如,我们正在构建一个移动网站,该网站的标签将具有点击或触摸事件。对于 iPhone,我们想使用“touchstart”事件。在我们将该处理程序绑定到对象之前,我们想测试他们的设备是否支持“touchstart”。如果没有,那么我们将绑定“onclick”。

做这个的最好方式是什么?

4个回答

您可以通过以下方式检测事件是否受支持:

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

看看这篇文章:

isEventSupported那里发布函数非常擅长检测各种事件,而且它是跨浏览器的。

这是一样的document.documentElement.hasOwnProperty('ontouchstart')吗?
2021-04-24 12:24:58
@RobG 我在 Chrome 35.0.1916.153 m 上的非触摸式笔记本电脑上运行了它false并得到了,正如预期的那样。我错过了什么吗?
2021-04-29 12:24:58
我有点想为此 +1,但我知道 Firefox 会false出于错误的原因返回这里。对于以这种方式检查的所有事件,Firefox 都会返回 false(我知道,这是 Fx 糟糕的罕见情况之一)。不过,这篇文章确实涉及到了这一点,所以你会得到 +1 ;-)
2021-05-01 12:24:58
这仅检测浏览器是否支持触摸事件,而不能确定设备是否支持它们。在非触摸设备上的 Chrome 中试试这个。
2021-05-04 12:24:58
很棒的资源。感谢您的快速帮助!
2021-05-10 12:24:58

使用此代码来检测设备是否支持触摸。

也适用于使用“MSPointerDown”事件而不是“touchmove”的 Windows 8 IE10

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;
    }

}
为什么不把它简化为单线呢? var supportsTouch = ('ontouchstart' in window || window.navigator.msPointerEnabled)
2021-04-16 12:24:58
不幸的是,这对我来说不适用于 HP 笔记本电脑(无触摸屏)上的 Windows 10 上的 ie 11。它错误地表示supportsTouch = true。但是当我将某些东西绑定到“touchstart”时,它永远不会被执行。有什么办法解决这个问题吗?
2021-04-16 12:24:58
修改了检查 msMaxTouchPoints 的答案(触摸支持测试)
2021-04-17 12:24:58
这是错误的。Pointers API 不仅仅适用于触摸设备。它适用于几乎所有输入设备。
2021-05-03 12:24:58

您可以检查是否typeof document.body.ontouchstart == "undefined"回退到正常的 dom 事件

我做了一个完整的演示,可以在每个浏览器中使用这个问题的解决方案的完整源代码:Detect touch screen devices in Javascript

你的例子产生了很多误报。无论触摸设备是否实际连接到系统,默认情况下都有许多浏览器实现了 Touch API。
2021-04-23 12:24:58
@Nilpo 也许你是对的。这篇文章是七年前写的。
2021-05-16 12:24:58