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

Hammer.js设置touch-action: pan-x后无法检测swipe事件如何解决

核心原因

手动给#sportCourtsRow元素添加touch-action: pan-x !important会强制浏览器原生接管水平方向触摸平移行为,Hammer.js无法获取完整触摸事件序列完成swipe动作判定;移除该属性后滚动失效,是因为Hammer.js默认会自动配置touch-action属性避免浏览器默认行为干扰事件识别,与原生滚动需求冲突。

解决方案

按以下步骤修改即可同时保留原生滚动能力和swipe事件检测能力:

  • 第一步:删除CSS中#sportCourtsRow选择器下的touch-action: pan-x !important;行,禁止手动强制覆盖touch-action属性
  • 第二步:创建Hammer实例时主动声明touchAction配置项,让Hammer自动适配两种需求,修改JS代码如下:
var hammertime = new Hammer(document.getElementById("sportCourtsRow"), {
  touchAction: 'pan-x' // 允许浏览器原生处理水平滚动,同时保留Hammer的事件监听能力
});
hammertime.get('swipe').set({ 
  threshold: 10,
  velocity: 0.3 // 新增速度阈值,避免普通滚动被误判为swipe,可根据实际使用场景调整数值
});

hammertime.on('swipe', function(ev) {
  document.getElementById("abc").innerHTML = "works!" 
});
  • 可选优化:如果仍存在滚动和swipe误判的问题,可以增加方向过滤逻辑,仅响应水平方向的swipe动作:
hammertime.on('swipe', function(ev) {
  if(ev.direction === Hammer.DIRECTION_LEFT || ev.direction === Hammer.DIRECTION_RIGHT) {
    document.getElementById("abc").innerHTML = "works!"
  }
});

内容的提问来源于stack exchange,提问作者Torpid

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:51:01