前端--移动端弹窗弹出后禁止页面滚动

1 篇文章 0 订阅
1 篇文章 0 订阅

问题描述

在做项目时,我碰到了一个问题,当浮层弹出后,浮层后面的内容仍可以滚动。

问题演示

在这里插入图片描述

解决方案

首先我们要明确,当浮层弹出后,我们操作的是body的滚动条,而不是其他div。

1.body出现滚动条

body出现滚动条。这种问题是应该避免,我认为合理的页面布局不应该让body出现滚动条。应该将内容放在div中,让div出现滚动条,这样可以很方便的处理各种问题。
如果你的布局不好改,也是有解决方法的。

首先在公共样式文件中添加一个类名

样式CSS:

.body-scrollCtrl {
  overflow: hidden!important;
  position: fixed; // 处理安卓和IOS的兼容问题,这样也会出现一个问题,就是浮层弹出后,页面会置顶
  width: 100%;
}

vue浮层组件,监听浮层的开关,弹出浮层,给body添加类名,关闭去除类名

watch: {
    showFlag(val) {
      if (val) {
        document.body.className = 'body-scrollCtrl';
      } else {
        document.body.removeAttribute('class', 'body-scrollCtrl');
      }
    },
  },

针对给body设置position: fixed;出现页面置顶的问题。可以在浮层弹出前记录body的scrollTop,浮层关闭后恢复即可。具体代码就不演示了

2.修改布局

个人认为body出现滚动条的布局都是不合理的,我们应该禁止body出现滚动条。
推荐布局—HTML,如果内容过多,使wrap出现滚动条,而不是body

<body>
  <div class="wrap">
    我们应该尽可能的操作wrap,而不是body
  </div>
</body>

CSS:给wrap设置height: 100vh,而不是100%。这是重点!!!设置成100%,出现滚动条仍然是body,而不是wrap。vh是相对viewport的高度,100vh等于100% * viewport的高度。此时wrap出现滚动条,但是浮层弹出后,页面也滚动不了,因为body没有滚动条,有滚动条的是wrap

<style>
  html,body {
    height: 100%;
  }
  .wrap {
    height: 100vh;
    overflow: scroll;
  }
</style>

效果展示

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值