移动端左右滑动事件冲突怎么解决?用Hammer.js检测不到Swipe
在移动端页面里用Hammer.js实现侧边栏滑动时,左右滑动经常触发不了Swipe事件,有时候会变成Pan事件。我按文档写了代码:
const mc = new Hammer(element);
mc.get('pan').set({ direction: Hammer.DIRECTION_HORIZONTAL });
mc.on("swipeleft swiperight", (e) => {
console.log('swipe detected!', e.direction);
});
但测试发现只有快速滑动才能偶尔触发,而且有时候会同时触发Pan事件导致逻辑混乱。试过设置mc.get('swipe').set({ threshold: 10 })也没改善,到底哪里设置错了?
pan的方向,但没处理swipe和pan之间的关系,所以会互相干扰。标准写法是这样:需要显式地设置
recognizers来控制手势识别器的行为。给swipe设置更高的优先级,并且限制它只能识别特定方向的滑动。同时,建议调整velocity和threshold参数,让swipe更容易触发。直接上代码:
重点在于最后两行配置:
recognizeWith允许两个手势同时识别,而requireFailure确保只有在swipe失败时才触发pan。这样能有效避免冲突。如果你还是遇到问题,可以再检查下是否其他库或框架也在捕获触摸事件,比如某些UI库可能会有自己的手势处理逻辑。
解决方法是明确设置Swipe的阈值和速度要求,同时限制Pan事件的影响。试试下面的配置:
关键点:
1.
velocity参数控制滑动速度,太慢不会触发Swipe。2.
recognizeWith和requireFailure方法用来协调Swipe和Pan的关系。3. 如果还是不行,可以试试增加
velocity值,或者调整threshold。CSS的话不用管,主要是JS配置的问题。试一下这个配置应该就能解决了。