fastclick,tap之类的类库还有使用的必要吗?

redbuck
  • 2.4k

这些类库是为了解决300毫秒延迟以及点透bug出现的.

刚转移动开发的时候没想太多,找了几篇文章都提到这些问题.提出的方案一般都是推荐使用这类插件.因此也就无脑采纳了.

现在回过头来发现这些类库本身也是有很多缺陷的.多次派发,input失效,点击失灵等等,不一而足.一些库的用法更是非常别扭,比如vue-tap,使用指令的方式--v-tap="{methods:handler}";

模仿zepto的tap尝试自己实现过一个类似的库.测试不到位,自己也觉得问题估计不少.觉得实际上走上了死胡同.

刚学编程的时候,非常喜欢造轮子.喜欢各种奇技淫巧.但渐渐的,发现其实标准才是解决问题的正经道路.

300毫秒是移动开发方兴未艾的时候的设计缺陷.实际上相关的标准早就修复了这个问题.方式如下

1.viewport
<meta name="viewport" content="width=device-width">

浏览器检测到这个标签,会认为这是一个已经对移动端做了良好适配的页面,会禁用双击缩放.也就不存在点击延迟问题.

2.touch-action
html {
  touch-action: manipulation;
}

这个属性用于指定元素对touch事件的响应方式.
详见MDN
兼容性不错

至于点透,这个问题其实只要知道了原因,很好解决.

<!-- box定位在链接上方 -->
<div class="box" ontouchend="this.style.display='none'">
</div>
<a href="http://www.baidu.com">百度一下,你就知道</a>

上面的代码会导致点击box隐藏时跳转.
解决方式非常简单

<div class="box" ontouchend="setTimeout(()=>{this.style.display='none'})">
</div>

把隐藏操作放在异步回调里,保证这个操作在元素派发click之后执行就完全可以避免点透.
实际上这种会导致点透的场景在页面中并不常见.为了解决这种问题引入一些问题多多的第三方类库实在是因噎废食.

当然,这只是个人看法.我正是因为并不能确定是否还有没有考虑到地方,加的群少,也没地方问,因此来此收集下大家的看法,希望各位不啬赐教.多谢各位.

回复
阅读 2.4k
1 个回答

我同意你的看法

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏