移动端 弹出层禁止弹窗下的页面滚动

制作弹窗的时候遇到的问题:页面很长,需要滚动。弹窗里也需要滚动。当滚动弹窗内的内容时,发现弹窗的内容不滚动,反而是页面上的内容发生了滚动。

找了找,发现已经有解决方案。直接贴出处:移动端滚动穿透问题解决方案

用的是方案四。在弹窗打开的时候,设置bodypositionfixed,且height: 100%

这个方案有个问题是,打开的瞬间,body会自动滚到页面顶部。虽然第二次打开的时候就不会。 解决的方法就是,打开时先获取bodyscrollTop(已经卷上去的高度),打开后马上设置bodytop为负的scrollTop。这个设置是瞬间的,所以看起来页面就不会被滚动到顶部。

代码:
弹窗打开之前

// before-open
const body = document.querySelector('body');
body.style.width = '100%';
this.scrollTop = document.scrollingElement.scrollTop;  // scrollTop 存储在全局
body.style.position = 'fixed';
document.body.style.top = -this.scrollTop + 'px';

弹窗关闭之前

// after-open
document.body.style.position = 'static';
document.scrollingElement.scrollTop = this.scrollTop;
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 场景:背景内容超出屏幕高度,需滚动展示;底部弹窗内容超出底部容器高度,需在容器内滚动展示;当底部弹窗打开,需阻止背...
    BubbleM阅读 10,411评论 0 6
  • 如何在弹层弹出时阻止底部滑动 最佳方案 网上对这个问题的解答众说纷纭,总结来看原理就下面这几种: 1.阻止...
    行云流水m阅读 5,176评论 0 4
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 28,473评论 1 45
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,788评论 4 61
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,709评论 1 92

友情链接更多精彩内容