You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:02:02