移动端弹窗滚动锁定需同时设置html和body样式并记录恢复scrollY,禁用touchmove须精准作用于非弹窗区域,iOS键盘问题需结合scrollIntoView与延迟回滚,overscroll-behavior仅防弹性穿透。移动端弹窗时页面还在滚动?body 的 overflow 不够用直接设 body { overflow: hidden } 看似能锁住背景,但实际在 iOS Safari 和部分 Android 浏览器里根本无效------滚动惯性、地址栏收起/展开、键盘弹出都会触发底层页面滚动。真正起作用的是对 html 和 body 同时加限制,并配合 position: fixed 重置滚动位置。实操建议:弹窗打开时,先记录当前 scrollY 值:const scrollTop = window.scrollY给 html 加 style="position: fixed; width: 100%; top: -${scrollTop}px",把整个视口"钉住"并回滚到原位置同时设 body { overflow: hidden } 防止键盘唤起后内容上顶关闭弹窗时,恢复 html.style.position 和 body.style.overflow,再调用 window.scrollTo(0, scrollTop)touchmove 事件阻止太粗暴,会干掉所有手势用 event.preventDefault() 拦截 touchmove 是常见做法,但一旦绑定在 document 上,连弹窗内的滑动轮播、下拉刷新、甚至输入框光标拖动都会失效。它不是"锁背景",而是"禁一切触摸滚动"。更安全的做法是只拦截非弹窗区域的滚动:立即学习"前端免费学习笔记(深入)";监听 touchmove 时,检查 event.target 是否在弹窗容器内(比如 event.target.closest('.modal'))不在弹窗内才调用 event.preventDefault()必须搭配 { passive: false } 注册事件,否则 Safari 会忽略 preventDefault别忘了在弹窗关闭时移除该监听,避免内存泄漏iOS 键盘弹出导致背景"闪一下"或自动滚动到顶部这是 iOS WebKit 的经典 Bug:软键盘唤起时,浏览器会尝试把聚焦元素滚动进可视区,结果把被锁住的 html 又强行拖动了。单纯靠 CSS 或 JS 锁定挡不住这个行为。 Fotor AI Image Generator Fotor 平台的 AI 图片生成器
相关推荐
花酒锄作田13 小时前
Pydantic校验配置文件hboot13 小时前
AI工程师第四课 - 深度学习入门GBASE18 小时前
G术时刻 |GBase 8s数据库事务并发控制之封锁技术介绍(下)ZhengEnCi1 天前
P2M-Matplotlib折线图完全指南-从数据可视化到趋势分析的Python绘图利器ZhengEnCi1 天前
P2L-Matplotlib饼图完全指南-从数据可视化到图表定制的Python绘图利器曲幽1 天前
你的REST接口还在“过度投喂”数据吗?——FastAPI + GraphQL实战避坑指南用户8358086187911 天前
基于 Self-RAG 与列表级重排序的进阶 RAG 系统设计与实现xiezhr1 天前
逛GitHub发现了一款免费的带AI功能的数据库管理工具Warson_L2 天前
Python `Annotated` 与 LangGraph Reducer 学习笔记韩师傅2 天前
海天线算法的前世今生