使用Javascript检测触摸屏设备

Bra*_*son 126 javascript iphone jquery android

在Javascript/jQuery中,如何检测客户端设备是否有鼠标?

当用户将鼠标悬停在某个项目上时,我有一个可以向上滑动一个小信息面板的网站.我正在使用jQuery.hoverIntent来检测悬停,但这显然不适用于iPhone/iPad/Android等触摸屏设备.所以在那些设备上,我想恢复点击以显示信息面板.

Kev*_*sJr 265

var isTouchDevice = 'ontouchstart' in document.documentElement;
Run Code Online (Sandbox Code Playgroud)

注意:仅仅因为设备支持触摸事件并不一定意味着它只是一个触摸屏设备.许多设备(例如我的华硕Zenbook)都支持点击和触摸事件,即使它们没有任何实际的触摸输入机制.在设计触摸支持时,始终包括点击事件支持,并且永远不要假设任何设备只是一个或另一个.

  • 正如Modernizr文档中所述,这只能检测*浏览器*功能,而不是*设备*功能......如果没有触摸输入的设备运行具有触控功能的浏览器,您将获得误报结果.我不知道如何在本机上检测*device*touch功能,而无需等待触摸事件发生. (32认同)
  • 为了检测我正在使用的IE 10 touch:(window.navigator.msMaxTouchPoints ||(document.documentElement中的'ontouchstart)); (12认同)
  • @typhon如果*软件*(Win 8,现代浏览器)支持触摸,这将永远是正确的 - 即使您使用的是不支持触摸的硬件(台式机,标准显示器,鼠标和键盘).因此,此解决方案已过时. (10认同)
  • document.documentElement`中的'ontouchstart'在BlackBerry 9300上错误地返回true (2认同)

hal*_*dom 20

找到测试window.Touch在Android上不起作用,但这样做:

function is_touch_device() {
  return !!('ontouchstart' in window);
}
Run Code Online (Sandbox Code Playgroud)

请参阅文章:使用JavaScript检测"触摸屏"设备的最佳方法是什么?


Moi*_*man 12

+1做hoverclick两者兼而有之.另一种方式可能是使用CSS媒体查询,并仅将一些样式用于较小的屏幕/移动设备,这些设备最有可能具有触摸/点击功能.因此,如果你通过CSS有一些特定的样式,并且从jQuery中检查那些元素,你可以将它们挂钩到移动设备样式属性中,以便为您编写特定于移动设备的代码.

见这里:http://www.forabeautifulweb.com/blog/about/hardboiled_css3_media_queries/


use*_*ser 8

return (('ontouchstart' in window)
      || (navigator.maxTouchPoints > 0)
      || (navigator.msMaxTouchPoints > 0));
Run Code Online (Sandbox Code Playgroud)

使用maxTouchPoints和msMaxTouchPoints的原因:

Microsoft已声明从Internet Explorer 11开始,可能会删除此属性的Microsoft供应商前缀版本(msMaxTouchPoints),并建议使用maxTouchPoints.

资料来源:http://ctrlq.org/code/19616-detect-touch-screen-javascript


Cod*_*Spy 7

if ("ontouchstart" in window || navigator.msMaxTouchPoints) {
    isTouch = true;
} else {
    isTouch = false;
}
Run Code Online (Sandbox Code Playgroud)

适用于每个地方!!

  • 在窗口 || 中执行 `isTouch = "ontouchstart" 会更简单 navigator.msMaxTouchPoints;` (2认同)