【问题标题】:Javascript, detect touch devicesJavascript,检测触摸设备
【发布时间】:2013-10-06 02:31:01
【问题描述】:

我正在使用这个函数来检测设备是否是触摸设备:

function is_touch_device()
{
    return !!('ontouchstart' in window) || !!('onmsgesturechange' in window);
};

从这里获得这个功能:What's the best way to detect a 'touch screen' device using JavaScript?

但是从 Chrome 25 (25.0.1364) 开始,它在我的不是触摸设备的桌面上返回 true。 我也将 IE9 更新为 IE10,它在 IE 中返回 true!

四处搜索,但找不到任何有用的东西来解决这个问题,除了使用类似这样的东西:http://detectmobilebrowsers.com/

你有什么推荐的?

期待您的回复!

【问题讨论】:

    标签: javascript touch


    【解决方案1】:

    代码运行良好,浏览器能够理解触摸事件,仅仅因为您的屏幕不可触摸并不意味着浏览器不支持该功能。您要测试的是无法真正测试的硬件功能。您始终可以使用不同的方式来查看用户是否在触摸一次后实际使用触摸界面,例如 this 文章描述的,或者大型库使用的许多其他方式,例如 Modernizer。

    作为参考,上面文章中实际使用的代码是:

    function isTouchDevice() {
       var el = document.createElement('div');
       el.setAttribute('ongesturestart', 'return;');
       if(typeof el.ongesturestart == "function"){
          return true;
       }else {
          return false
       }
    }
    

    【讨论】:

      【解决方案2】:

      这似乎有效:

      function isTouchEnabled() { return !!document.createTouch; }
      

      【讨论】:

      • 谢谢!它适用于几乎所有设备(FF、IE、Android),但我的 Windows 桌面上的 Chrome 除外。
      【解决方案3】:

      您可以使用Modernizr 来检测触摸功能。

      这个问题与What's the best way to detect a 'touch screen' device using JavaScript? 非常相似,或许应该被视为重复问题。

      【讨论】:

      • Modernizr 未检测到触摸设备。它只识别触摸浏览器
      【解决方案4】:

      当我通过笔记本电脑访问我一直在处理的网站时,我也遇到了误报 IE10 触摸问题。原来的is_touch_device 方法,我用的基本一样。我将该语句的后半部分修改为:

      function is_touch_device()
      {
          return !!('ontouchstart' in window) || (!!('onmsgesturechange' in window) && !!window.navigator.maxTouchPoints);
      }
      

      window.navigator.maxTouchPoints 似乎是 IE10 中基于此帖子的特定内容:http://msdn.microsoft.com/en-us/library/hh772144(v=vs.85).aspx

      【讨论】:

        【解决方案5】:

        您可以使用51dergees.mobi 在服务器上适当地更改页面视图进行检测。它具有 HasTouchScreen、IsSmartPhone、IsTablet 属性等。

        【讨论】:

        • 谢谢,但我正在搜索触摸屏检测,而不是设备检测
        • 还需要注意的是,如果您有一个缓存您的站点的 cdn,那么进行服务器端设备检测实际上并不能奏效。
        猜你喜欢
        • 2011-04-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-12
        • 1970-01-01
        • 1970-01-01
        • 2019-03-09
        相关资源
        最近更新 更多