小编典典

使用 JavaScript 检测“触摸屏”设备的最佳方法是什么?

all

我编写了一个 jQuery 插件,可以在桌面和移动设备上使用。我想知道 JavaScript 是否有办法检测设备是否具有触摸屏功能。我正在使用
jquery-mobile.js 来检测触摸屏事件,它适用于 iOS、Android 等,但我还想根据用户的设备是否有触摸屏来编写条件语句。

那可能吗?


阅读 95

收藏
2022-03-14

共1个答案

小编典典

更新: 在将整个功能检测库拉入您的项目之前,请阅读下面的答案检测实际的触摸支持更为复杂,Modernizr仅涵盖一个基本用例。
2021 年更新

要查看旧答案:查看历史记录。我决定从头开始,因为在将历史记录在帖子中时它会失控。

我最初的回答说使用与 Modernizr 相同的功能可能是个好主意,但这不再有效,因为他们删除了此 PR 上的“touchevents”测试:https ://github.com/Modernizr/Modernizr /pull/2432因为它是一个令人困惑的主题。

话虽如此,这应该是检测浏览器是否具有“触摸功能”的一种相当不错的方法:

function isTouchDevice() {
  return (('ontouchstart' in window) ||
     (navigator.maxTouchPoints > 0) ||
     (navigator.msMaxTouchPoints > 0));
}

Modernizr是一种在任何站点上进行各种特征检测的出色、轻量级的方法。

它只是将类添加到每个功能的 html 元素。

然后,您可以在 CSS 和 JS 中轻松定位这些功能。例如:

html.touch div {
    width: 480px;
}

html.no-touch div {
    width: auto;
}

和 Javascript(jQuery 示例):

$('html.touch #popup').hide();
2022-03-14