Javascript 如何使用JS/jQuery检查浏览器对touchstart的支持?
为了遵循最佳实践,我们尝试根据您使用的设备使用适当的JavaScript/jQuery事件。例如,我们正在构建一个移动站点,该站点有一个标记,该标记将包含onclick或touch事件。对于iPhone,我们希望使用“touchstart”事件。在将该处理程序绑定到对象之前,我们想测试他们的设备是否支持“touchstart”。如果没有,那么我们将绑定“onclick”Javascript 如何使用JS/jQuery检查浏览器对touchstart的支持?,javascript,jquery,iphone,mobile,unobtrusive-javascript,Javascript,Jquery,Iphone,Mobile,Unobtrusive Javascript,为了遵循最佳实践,我们尝试根据您使用的设备使用适当的JavaScript/jQuery事件。例如,我们正在构建一个移动站点,该站点有一个标记,该标记将包含onclick或touch事件。对于iPhone,我们希望使用“touchstart”事件。在将该处理程序绑定到对象之前,我们想测试他们的设备是否支持“touchstart”。如果没有,那么我们将绑定“onclick” 执行此操作的最佳方法是什么?您可以检测以下各项是否支持此事件: if ('ontouchstart' in document.
执行此操作的最佳方法是什么?您可以检测以下各项是否支持此事件:
if ('ontouchstart' in document.documentElement) {
//...
}
看看这篇文章:
这里发布的
isEventSupported
函数非常擅长检测各种各样的事件,而且它是跨浏览器的。您可以检查typeof document.body.ontouchstart==“未定义”
要返回到正常的dom事件我做了一个完整的演示,在每个浏览器中都可以使用此问题解决方案的完整源代码:。使用此代码检测设备是否支持触摸
也适用于使用“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;
}
}
我有点想+1这个,但我知道Firefox会因为错误的原因返回
false
。Firefox对以这种方式检查的所有事件都返回false(我知道,这是Fx糟糕的罕见情况之一)。但是,本文确实讨论了这一点,因此您得到了+1;-)巨大的资源。谢谢你的快速帮助!这仅检测浏览器是否支持触摸事件,而不确定设备是否支持触摸事件。在非触摸设备上的Chrome中尝试此操作。这与document.documentElement.hasOwnProperty('ontouchstart')
相同吗?@RobG我在非触摸笔记本电脑上的Chrome 35.0.1916.153 m中运行了此操作,得到了预期的false
。我遗漏了什么吗?为什么不把它简化为一行呢var supportsTouch=(window | | | window.navigator.msPointerEnabled中的“ontouchstart”)
不幸的是,这对我来说不适用于HP笔记本电脑(不带触摸屏)上Windows 10上的ie 11。它错误地说supportsTouch=true。但当我将某个东西绑定到“touchstart”时,它永远不会被执行。有什么办法吗?这是错误的。指针API不仅仅适用于触摸设备。它适用于几乎所有的输入设备。修改答案以检查MSMAXStouchpoints(触摸支持测试)您的示例会产生大量误报。无论触摸设备是否实际连接到系统,默认情况下有许多浏览器实现触摸API。@Nilpo也许你是对的。这篇文章是七年前写的。