转载请注明出处: http://qiudeqing.com/mobile_web/2016/05/21/mobile-browser-click-300ms-delay.html

起因

2007年苹果为了解决iPhone Safari访问PC页面的缩放问题, 提供了一个双击缩放功能.当用户第一次触摸屏幕的时候浏览器等待300ms才能判断用户是要点击(click)还是缩放(zoom),这就造成用户触摸屏幕到click事件触发存在300ms延迟.

触摸屏幕事件流程如下:

  1. touchstart
  2. touchend
  3. Wait 300ms in case of another tap
  4. click

受到这个延迟影响的场景有:

随着iPhone的成功, 后续的无线浏览器复制了它的大部分操作习惯, 其中就包括双击缩放, 这也成为主流浏览器的一个功能.

这300ms延迟在平时浏览网页不会带来严重问题, 但是对于高性能web app就是一个严重的问题, 响应式设计的流行也让双击缩放逐渐失去用武之地.

点击本页面测试click延迟

浏览器解决方案

页面实现者解决方案

从上面可以看出再过两年300ms延迟将成为历史, 在浏览器解决这个问题之前还是需要页面实现者提供兼容方案

总结

结合前面的讨论个人采用以下方案

2016-11-14更新

苹果在2016-3-21发布了iOS9.3, 其中正式移除了300ms延迟, 加上chrome等浏览器消除300ms延迟, 只需要设置viewporttouch-action就可以直接用click事件了

参考资料