多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] # 移动端 click 时间 300ms 延迟 web 开发对鼠标有一套完整的事件支持,但是对移动系统上的点击,触控,滑动的事件支持并不完善。就拿最常见的点击来说,h5 就有过很长一段时间的不好体验。 在移动端,click点击事件会造成300ms的延迟,造成这种延迟的原因在于:当用户一次点击屏幕之后,浏览器并不能立刻判断用户是要进行双击缩放,还是想要进行单击操作。因此,浏览器就等待 300 毫秒,以判断用户是否再次点击了屏幕。 点击延迟,对于早期的h5开发可以说是致命的,相较于native的流畅来说,h5的300毫秒的点击延迟几乎是不可接受的。 业界常用的方法是采用将touch事件来进行一系列封装,进而得出一套触控Api来。对于这种体验不佳的问题,我们可以使用tap等事件来替代,而tap事件属于模拟类事件,需要引入zepto.js或者百度的touch.js等插件辅助实现 fastclick.js 就是经过大量优化的去除点击延迟解决方案。原理是hook了浏览器的touch事件来模拟click事件,让前端开发人员以熟悉的click来书写代码 除了点击事件,滚动、滑动、多点触控,这些浏览器不原生提供的能力都需要我们用代码去模拟出来。 ![](https://box.kancloud.cn/473d683c50af7ffa2066f17f76c3aa4e_800x186.png) 采用较常规的解决方案 fastclick 来去除点击延迟,在以后的项目中如果遇到更复杂的交互需求,会采用更具扩展性的hammerjs来处理各种各样的触碰需求。比如滑动、旋转、多点触碰。 ## 参考: [现在最好的触屏事件库是哪个?](https://www.zhihu.com/question/27316588) [移动端300ms点击延迟和点击穿透问题](http://www.jianshu.com/p/6e2b68a93c88) [也来说说touch事件与点击穿透问题](https://segmentfault.com/a/1190000003848737)