mobilebone icon indicating copy to clipboard operation
mobilebone copied to clipboard

跪求对tap事件的技术方案全解释

Open dancinglone opened this issue 9 years ago • 17 comments

我一直跟着项目的更新去更新mobilebone源文件,但一直都被tap事件搞得很头痛。经常出现点击不了或者要双击的情况。重点是在各种设备表现不一致,用不同版本的Mobilebone、搭配不同的js库(如iscroll、zepto等等)表现都不同。本人小白,已哭晕在厕所,跪求鑫哥赐教。

dancinglone avatar May 07 '15 03:05 dancinglone

我用微信实例里面的demo似乎还是有问题

dancinglone avatar May 07 '15 05:05 dancinglone

使用iscroll,配置iscroll: click:true, tap:true 再结合mobilebone,在小米2、三星4.1、手机浏览器上都会遇到点不动的情况

ghost avatar May 07 '15 06:05 ghost

iscroll如果单设置tap:true,mobilebone框架中很多时候a链接都跳转不了

ghost avatar May 07 '15 06:05 ghost

Mobilebone会检测是否支持$().tap()事件绑定,如果支持,则使用tap事件,如果不支持,则使用原生的click事件~

iscroll自身就有tap处理,与Zepto本身就可能会冲突。还有一些touch相关的事件脚本,其处理也不一样。由于移动设备原本是没有tap事件的,因此,这些自定义的事情出现一些问题是在所难免的。

Mobilebone只是担任一个click/tap事件传递的角色,深层次的原因实际上不是Mobilebone导致的。

zhangxinxu avatar May 08 '15 12:05 zhangxinxu

@xuetian120 有些tap事件为了不和click事件并发冲突,会干掉默认的click行为(如果你绑定了tap方法),因此,a链接都跳转不了,是由于mobilebone委托了tap方法,而这些tap方法干掉了click跳转行为导致。

zhangxinxu avatar May 08 '15 12:05 zhangxinxu

其实我压根没有引入zepto的touch 模块对触摸事件的支持!如果iscroll只配置:tap:true没有click:true,结合mobilebone问题就会很严重,在Android 5.0.2米柚系统,普通a连接是不能点击的,但如果isrcoll加入配置click:true,Android 5.0.2 中的a连接可以点击,但是更严重的问题是三星Android 4.1、小米Android 4.4此类4系列的a都不能点击,蛋疼得很~

ghost avatar May 08 '15 14:05 ghost

感谢鑫哥的回复! 嗯,我知道这不是Mobilebone导致的。 但对于我这种前端仅一般水平的菜鸟,处理这些问题太吃力了,所以想请教一下。 敢问,像iscroll那样,开发出不同重量级的mobilebone呢?重一点的整合常用的iscroll、zepto等等, 增强整个项目的生产力。便于大范围的应用处于更快速地开发出有原生体验的web app。

dancinglone avatar May 08 '15 16:05 dancinglone

综合示例complex中,发现是注释了// /Android/i.test(navigator.userAgent) && pageinto.addEventListener('tap', Mobilebone.handleTapEvent, false);

如果修改wechat 的tap: true,配置使用click: true // bind custom scroll events for content var weChatScroll = new IScroll(pageinto.querySelector(".content"), { click: true }); 在chrome浏览器的模拟器上所有a链接都点击不了,同时设置 var weChatScroll = new IScroll(pageinto.querySelector(".content"), { click: true, tap: true }); 也是点击不响应。

ghost avatar May 09 '15 02:05 ghost

修改后都是基于/test/complex/index.html#&pageHome页面点击列表。

ghost avatar May 09 '15 02:05 ghost

更进一步,从isrcoll官方下载一份https://github.com/cubiq/iscroll代码,打开iscroll-master\demos\click,配置如下myScroll = new IScroll('#wrapper', { mouseWheel: true, click: true }); 在pc中使用chrome浏览器的模拟器打开预览,点击a链接,是有响应的!

综上,不得不怀疑mobilebone跟iscroll冲突或者对click做了某种拦截!

ghost avatar May 09 '15 03:05 ghost

导致了只能是配置tap: true

ghost avatar May 09 '15 03:05 ghost

myScroll = new IScroll($(pageinto).find(".content")[0], { probeType: 2, mouseWheel: true //tap: true }); 我现在tap click都关了 加了tap 点链接就会载入两次

chfeizy avatar May 11 '15 01:05 chfeizy

别用tap了,直接用fastclick,一劳永逸

zdfsilence avatar May 12 '15 01:05 zdfsilence

看这里 --- Mobilebone+IScroll+Zepto+FastClick 的推荐配置方案 https://github.com/zhangxinxu/mobilebone/issues/150

plhwin avatar May 12 '15 08:05 plhwin

看来这是个共性问题

julor avatar May 17 '15 02:05 julor

我在v2.6.1里面很不情愿打了个小补丁,外链地址,非Ajax地址会手动跳转下~

zhangxinxu avatar May 30 '15 17:05 zhangxinxu

没懂啊 那iscroll应该怎样设计才能兼容啊

dancinglone avatar Jun 01 '15 12:06 dancinglone