uniapp 遮罩层下内容禁止滚动

文章讲述了在使用uniapp开发时,如何通过设置页面body的overflow属性来控制弹出层或遮罩层出现时遮盖内容并禁止其滚动。作者提供了Vue3.0和Vue2版本的解决方案,并鼓励读者在遇到帮助时点赞支持。

uniapp 设置弹出层后 遮罩层下的内容仍然可以滚动

在这里插入图片描述
背景的新闻内容仍然可以滚动 (逻辑上应该是遮住的内容就无法滚动了)

解决方法 :弹窗或遮罩层出现时 将页面body属性为overflow即可禁止滚动(禁止点击的实现效果我觉得应该跟这个类似 设置页面不能点击就行)

//显示弹窗
const showDialog=()=>{
		show.value=true  //控制弹窗显示
		//核心是下面这句话   这样遮罩层出现时 遮罩层下的内容就无法滚动
	  document.body.style.overflow = 'hidden'; // 阻止页面滚动

//关闭弹窗
const close=()=>{
	show.value=false  //控制弹窗隐藏
	//关闭弹窗后  页面就又可以滚动了   
	 document.body.style.overflow = '';
}
}

我用的vue 3.0 友友们如果是vue2的话应该也是同样适用的,如果有帮助的话记得点个赞!!!

UniApp 中,若希望在显示遮罩层禁止底层内容滚动行为,可以通过结合 CSS 样式与 Vue 的动态类绑定机制实现。具体实现方式如下: 在遮罩层显示时,对最外层容器动态绑定一个类名,该类名包含 `overflow: hidden` 与 `position: fixed` 样式规则,从而阻止页面的滚动行为。以下是一个典型的实现示例: ```html <template> <view :class="{'mask-active': isMaskVisible}"> <!-- 页面主体内容 --> <scroll-view scroll-y :scroll-with-animation="true" style="height: 100vh;"> <!-- 页面内容 --> </scroll-view> <!-- 遮罩层 --> <view v-if="isMaskVisible" class="mask" @touchmove.stop.prevent> <!-- 遮罩层内容 --> </view> </view> </template> <script> export default { data() { return { isMaskVisible: false }; } }; </script> <style scoped> .mask-active { overflow: hidden; position: fixed; width: 100%; height: 100%; } .mask { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.5); z-index: 999; } </style> ``` ### 实现说明: - **动态类绑定**:通过 `:class="{'mask-active': isMaskVisible}"` 控制遮罩层显示时的样式应用[^3]。 - **CSS 样式控制**:`.mask-active` 类中使用 `overflow: hidden` 和 `position: fixed` 来阻止页面滚动- **阻止默认触摸行为**:在遮罩层上使用 `@touchmove.stop.prevent` 阻止事件冒泡和默认行为,防止页面滚动[^2]。 ### 注意事项: - 确保遮罩层的 `z-index` 值高于页面主体内容,以实现视觉上的覆盖效果。 - 若页面内容本身包含滚动区域(如 `scroll-view`),需确保其滚动行为不受全局样式影响。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值