移动端滑动手势冲突:overflow: auto导致外层横向滑动失效

在做移动端交互时,有一种场景非常常见:

外层容器负责左右拖动,内层容器负责上下滚动。

例如:

看起来这个需求并不复杂。但是我在实际开发时遇到了一个问题:

内层元素内容过多,加上 overflow: auto 之后,外层的横向拖动突然变得不正常。

例如:

经过排查发现将 overflow: auto; 改成 overflow: hidden; 外层横向拖动又恢复了。

经过吉米尼老师的提醒,发现一个CSS属性:touch-action

css 复制代码
touch-action: pan-y;

表示:

告诉浏览器,这个区域的纵向平移可以由浏览器处理。

而其他没有交给浏览器处理的手势,可以由 JavaScript 自己实现。

MDN 对 touch-action 的描述也是这个思路:浏览器会根据 touch-action 确定哪些触摸手势由浏览器处理,应用程序则可以处理剩余的手势。

那现在还有一个问题:

浏览器到底应该如何处理用户的触摸手势?

这时候就需要:

css 复制代码
touch-action: pan-y;

完整写法:

css 复制代码
.scroll {
  height: 100%;
  overflow-x: hidden;
  overflow-y: auto;

  touch-action: pan-y;
}

这实际上是在明确表达:

这个区域允许浏览器处理纵向平移。

而横向拖动则由 Pointer Events 自己处理。


总结:

overflow 负责定义"内容在哪个方向可以滚动",touch-action 负责定义"浏览器可以处理哪些触摸手势",JavaScript 则负责实现剩下的自定义手势。把三者的职责分清楚,移动端的手势冲突自然就容易解决了。

相关推荐
January12078 分钟前
【AI方法笔记】2026-11-02:模型流式吐 JSON 时,前端会遇到四种崩法
前端·人工智能·笔记·json
asdzx6712 分钟前
C# 操作 PDF 元数据:从属性写入到字段提取的完整流程
前端·pdf·c#
幻境如梦丶皆为虚26 分钟前
从零写一个 DSH 插件:在左侧菜单栏加一个「测试」
开发语言·javascript·ecmascript
吹什么轩29 分钟前
constexpr 完全指南:从 const 的两种含义,到编译期计算的四次演进
java·前端·javascript
小蒜学长1 小时前
基于SpringBoot+Vue的云南地区扶贫助农系统的设计与实现(代码+数据库+LW)
java·vue.js·spring boot·后端·乡村振兴
Bruce_Liuxiaowei1 小时前
前端校验登录态,等于没校验——一次应急广播终端高危漏洞的发现与报送
运维·前端·安全
Meta Luo1 小时前
AI 时代,Web 自动化测试该怎么做?
前端·人工智能·playwright 替代工具·无代码自动化测试工具·低代码 ui 自动化测试·web 回归测试工具
去伪存真1 小时前
AI Agent 性能评估指标与自动化测试落地方案
前端·agent
MaAidan2 小时前
用 Agent 排查线上问题:SLS 日志分析 + DB/Redis 数据验证,一条链路搞清楚
前端·bootstrap·html
墨林陌2 小时前
AI 热点日报(2026-11-03):美团发布 1.6 万亿参数国产大模型,四大厂商共推 AI 训练退出标准
前端