Javascript 如何确定客户端是否为触摸设备

Javascript 如何确定客户端是否为触摸设备,javascript,jquery,touch,tablet,Javascript,Jquery,Touch,Tablet,有没有什么好的、干净的方法或技巧来确定用户是否在触摸设备上 我知道有些东西像 var isiPad=navigator.userAgent.match(/iPad/i)!=无效 但我只是想知道,是否有一种技巧可以用来确定用户是否在触摸设备上? 因为触摸设备和平板电脑比iPad多得多 谢谢。您可以使用以下JS功能: function isTouchDevice() { var el = document.createElement('div'); el.setAttribute('on

有没有什么好的、干净的方法或技巧来确定用户是否在触摸设备上

我知道有些东西像
var isiPad=navigator.userAgent.match(/iPad/i)!=无效

但我只是想知道,是否有一种技巧可以用来确定用户是否在触摸设备上? 因为触摸设备和平板电脑比iPad多得多


谢谢。

您可以使用以下JS功能:

function isTouchDevice() {
   var el = document.createElement('div');
   el.setAttribute('ongesturestart', 'return;'); // or try "ontouchstart"
   return typeof el.ongesturestart === "function";
}
来源:

请注意,以上代码仅测试浏览器是否支持触摸,而不是设备

相关链接:

包含中可能有检测,这是一个很小的特征检测库。然后你可以使用下面的方法

if (Modernizr.touch){
   // bind to touchstart, touchmove, etc and watch `event.streamId`
} else {
   // bind to normal click, mousemove, etc
}
看看这个,它提供了一个非常好的代码片段,用于在检测到触摸设备时执行什么操作,或者在调用touchstart事件时执行什么操作:

$(function(){
  if(window.Touch) {
    touch_detect.auto_detected();
  } else {
    document.ontouchstart = touch_detect.surface;
  }
}); // End loaded jQuery
var touch_detect = {
  auto_detected: function(event){
    /* add everything you want to do onLoad here (eg. activating hover controls) */
    alert('this was auto detected');
    activateTouchArea();
  },
  surface: function(event){
    /* add everything you want to do ontouchstart here (eg. drag & drop) - you can fire this in both places */
    alert('this was detected by touching');
    activateTouchArea();
  }
}; // touch_detect
function activateTouchArea(){
  /* make sure our screen doesn't scroll when we move the "touchable area" */
  var element = document.getElementById('element_id');
  element.addEventListener("touchstart", touchStart, false);
}
function touchStart(event) {
  /* modularize preventing the default behavior so we can use it again */
  event.preventDefault();
}

使用
document.createEvent(“TouchEvent”)
在桌面设备上不起作用。所以可以在if语句中使用它

请注意,此方法可能会在非触摸设备上产生错误。我更喜欢在
document.documentElement
中检查
ontouchstart

if ("ontouchstart" in document.documentElement)
{
  alert("It's a touch screen device.");
}
else
{
 alert("Others devices");
}
我在这里和那里浏览了很多后发现的最简单的代码

如果您使用,它很容易使用
modernizer.touch
,如前所述

但是,为了安全起见,我更喜欢结合使用
modernizer.touch
和用户代理测试

var deviceAgent = navigator.userAgent.toLowerCase();

var isTouchDevice = Modernizr.touch || 
(deviceAgent.match(/(iphone|ipod|ipad)/) ||
deviceAgent.match(/(android)/)  || 
deviceAgent.match(/(iemobile)/) || 
deviceAgent.match(/iphone/i) || 
deviceAgent.match(/ipad/i) || 
deviceAgent.match(/ipod/i) || 
deviceAgent.match(/blackberry/i) || 
deviceAgent.match(/bada/i));

if (isTouchDevice) {
        //Do something touchy
    } else {
        //Can't touch this
    }
如果不使用Modernizer,只需将上面的
Modernizer.touch
功能替换为
(“document.documentElement”中的“ontouchstart”)

还请注意,测试用户代理
iemobile
将为您提供比
Windows Phone
更大范围的检测到的Microsoft移动设备


适用于iPhone,但Android、黑莓、Symbian、WebOS……又如何?这不是一个有用的评论。不工作怎么办?您是否
警报(el.ongesturestart类型)
或尝试了什么?什么装置?什么操作系统?没有建设性信息的否决投票对任何人都没有帮助。这也是一个2年前的帖子。全世界都在使用Safari的iOS 7.0.6的iPhone上运行着,这一切都起作用了吗?或者此功能检测>UA检查。您的用户代理检测逻辑被破坏:您假设每个移动设备都有一个触摸屏。一些黑莓机型(OS)触摸屏或台式机怎么办,这没有检测到。我不相信这一点,因为它在我的mac电脑上是真实的,而mac电脑不是触摸设备。这只是问浏览器是否支持它。我想