欢迎使用CSDN-markdown编辑器

来源:互联网 发布:优化网站排名的步骤 编辑:程序博客网 时间:2024/06/03 22:42

1、判断PC端 or 移动端

var isTouch = "ontouchstart" in window || navigator.msMaxTouchPoints ? true:false;

手机web浏览器,chrome模拟手机、手机APP会返回true。navigator.msMaxTouchPoints针对IE10及以上浏览器。

可进一步扩展:

var isTouch = ('ontouchstart' in window)?true:false;var touchStartEvent = isTouch ? 'touchstart':'mousedown';var touchMoveEvent = isTouch ? 'touchmove':'mousemove';var touchEndEvent = isTouch ? 'touchend':'mouseup';var transitionEndEvent = vendorPrefix+'TransitionEnd';

补充:Web前端开发中的Touch事件

  随着HTML5的发展,为了支持对触摸屏的操作,多个浏览器厂商都在自己的浏览器引擎中添加了很多支持touch的事件。但是由于W3C并没有提供一个统一的标准,或者说该标准在不同的浏览器厂商中所遵循的情况也有很大区别,因此我们不得不针对浏览器版本做一些特殊的处理。
  
  基本上有两大阵营:IE浏览器和基于Webkit内核的浏览器。
  但是IE本身由于各个不同版本之间存在的兼容性问题又有一些区别,常见的如IE7、IE8、IE9和IE10。基于Webkit内核的浏览器如Safari、Chrome等都是常用的。这里需要注意的是,Safari提供一个Windows的Desktop版本,这个版本不同于Apple提供给它自己设备上的浏览器版本,所以在开发测试的时候需要区别开来。
  
  关于兼容性问题:
  1. Window.navigator.msPointerEnabled语句只会判断浏览器是否支持MSPointer相关的事件,而不会判断用户的设备是否支持触摸操作。目前只有在IE10上该对象不会返回undefined,其它版本的浏览器均视该对象不存在。如果你想判断用户的设备是否支持触摸操作,应该使用Window.navigator.msMaxTouchPoints,如果该对象存在并且返回的结果大于1,则表示设备支持触摸操作并且是支持多点触摸的。

  2. 在IE中,MSPointer相关的事件只会在浏览器支持的时候被触发,如果页面元素同时还带有鼠标事件,则鼠标事件也会被同时触发。

  3. Webkit内核的浏览器支持touchstart事件,MSPointer相关的事件在这些浏览器上被视为无效。通过e.preventDefault()语句可以阻止鼠标默认行为,从而不让mouse hover事件触发。

  所以,上面代码片段同时兼容了低于IE10和IE10,以及兼容在IE10上的触摸和鼠标操作,和非IE内核的浏览器上的触摸和鼠标操作。有一个情况未考虑,那就是 低于IE10情况下的触摸操作,相信这种设备应该很难见到吧!

  当然,你完全可以将鼠标的Click事件当作touch事件来处理,如果元素上除了Click之外没有任何其它的事件。但是如果元素上还有mouse hover相关的事件,则用户在touch的同时触发mouse hover,在这种情况下你或许可以考虑使用上面的逻辑来处理cross events。

0 0
原创粉丝点击