Hammer JS tap事件需触发pan后才生效,Cordova iOS应用求助
问题分析与解决方案
嘿,我一眼就瞅出问题所在了!你的tap(也就是你代码里命名为doubletap但taps设为1的事件)之所以要等pan触发一次才生效,完全是因为事件监听器绑错地方啦!
看你的代码,你把doubletap的on绑定写在了panend的回调函数里面——这就意味着,只有当用户完成一次滑动操作、panend事件被触发后,这个tap监听器才会被添加到Hammer实例上。在那之前,页面根本不知道要监听tap事件,自然就没反应啦!
下面是修正后的代码,你直接替换就行:
var myElement = document.getElementById('screenWidth'); var mc = new Hammer.Manager(myElement); // 添加tap识别器(这里建议把event名改成tap更直观,避免混淆) mc.add( new Hammer.Tap({ event: 'tap', taps: 1 }) ); // 添加pan识别器 mc.add(new Hammer.Pan({direction:Hammer.DIRECTION_HORIZONTAL, threshold:80, pointers: 0})); // 先绑定tap事件监听器,放在全局位置,页面加载完就生效 mc.on("tap", function(e){ var tapX = e.center.x; var tapY = e.center.y; console.log(tapX + " + " + tapY); e.gesture.srcEvent.preventDefault(); }); // 再绑定panend事件监听器 mc.on("panend", function(ev) { if(ev.direction == Hammer.DIRECTION_RIGHT) { //alert("Swipe right."); } else if (ev.direction == Hammer.DIRECTION_LEFT) { //alert("Swipe left."); } });
额外提个小建议:你原来把Tap识别器的event设为doubletap但taps是1,这有点容易让人误解,改成tap更符合常规用法,当然如果你有特殊需求保持原名也没问题,只要把对应的on监听事件名对应上就行。
内容的提问来源于stack exchange,提问作者Christheoreo
相关产品推荐
相关产品推荐

