vue 弹层弹起 底部内容禁止滚动 并且保留当前滚动条高度

本文介绍了如何在Vue项目中实现全局方法,用于在弹窗出现时阻止页面滚动并保持当前位置,以及弹窗关闭时恢复滚动。首先,在公共CSS中定义了一个名为`dialog-open`的样式,然后在公共JS中编写了添加和删除该类名的方法,以控制页面滚动。最后,展示了在弹层组件中如何调用这些全局方法来实现所需功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前沿
这是一个通用的需求,当页面提示框弹起禁止下边的内容滚动,并且保留滚动到的当前的高度,我是在vue公共的方法中写的,全局通用。

第一步:先在你的公共css里边写入这个样式

.dialog-open {
  position: fixed;
  width: 100%;
  left: 0;
  top: 0;
}


第二步 :在你的公共js里边写入这个方法,导入全局,现在还不知道怎么注册全局方法的,请移步
关于vue全局引用公共的js和公共的组件的折腾

// 判断有无class
function hasClass(name) {
  let reg = new RegExp('(^|\\s)' + name + '(\\s|$)');
  return reg.test(document.body.className);
}

export default {
  // body 添加 class 阻止滚动穿透
  addClass(name){
    if (hasClass(name)) {
      return;
    }
    let bodyScrollTop = document.body.scrollTop || document.documentElement.scrollTop;
    if (document.body.className === '') {
      document.body.className += name;
    } else {
      let newClass = document.body.className.split(' ');
      newClass.push(name);
      document.body.className = newClass.join(' ');
    }
    document.body.style.top = -bodyScrollTop + 'px';
  },
  // body 删除 class 恢复滚动
  removeClass(name) {
    if (hasClass(name)) {
      let styleTop = Math.abs(parseInt(document.body.style.top));
      document.body.removeAttribute('style');
      document.body.className = document.body.className.replace(new RegExp('(\\s|^)' + name + '(\\s|$)'), '');
      document.body.scrollTop = document.documentElement.scrollTop = styleTop;
    }
  },
}


记得要导入在全局哦

第三步 :在你的弹层组件内使用

//弹层弹起
this.addClass('dialog-open'); // 阻止滚动穿透
//弹层消失
this.removeClass('dialog-open');


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值