
弹窗常通过限制页面滚动防止背景移动,但关闭、跳转或脚本异常后若没有正确恢复,整页会像卡住。应追踪开启与关闭过程中的样式、状态及焦点,而不是永久加一条overflow:auto覆盖所有弹窗行为。
区分页面锁与弹窗内滚动
打开弹窗后背景不动可以是设计需要,但弹窗内容超出屏幕时仍应有可访问的滚动路径。检查body、html及相关容器的overflow、position和高度。手机软键盘、浏览器工具栏和内部滚动也会改变可见范围,不能只在桌面短弹窗上验证。
追踪所有关闭和跳转方式
关闭按钮、遮罩、Escape、表单成功、页面跳转和浏览器返回可能走不同代码。记录哪些路径会遗漏恢复,查看是否有两个插件同时维护锁状态。多个弹窗叠加时,关闭其中一个也不能过早解锁仍应被模态限制的背景。

恢复状态而非粗暴覆盖
需要恢复的是开启前的滚动与相关样式状态,包含可能保存的滚动位置。直接把所有body定位和overflow强制改为默认,可能造成页面跳回顶部、底层穿透或另一个弹层失效。修复应限制到确认负责该弹窗的组件与生命周期。
结合焦点与长内容回归
检查关闭后焦点返回触发按钮或合理位置,页面恢复原先滚动位置,键盘不会仍困在已隐藏内容。手机上用长表单、横竖屏和软键盘测试,确保弹窗内外各自能按预期滚动。脚本错误消除后,也要验证真实关闭路径而非仅刷新页面。
关键区别

背景锁定:限制底层页面移动;应有完整恢复过程。
弹窗内滚动:访问长内容;不能与背景一起锁死。
关闭事件:可能有多条路径;逐种检查不要遗漏。
怎样确认处理到位
所有允许的关闭方式都能恢复正确页面滚动和焦点,长弹窗内容可达,手机软键盘与多弹层场景没有锁残留。
容易误判的边界
刷新后暂时正常不是修复证据;不要用全局CSS取消全部模态限制,掩盖真正的状态管理问题。
