怎样阻止页面滚动穿透

在前端开发中,当打开长页面上的弹框时,可能会遇到遮罩层后面页面仍可滚动的问题,即滚动穿透。为了解决这个问题,可以在触发弹框时,给最外层div添加特定样式来禁止页面滚动。通过示例代码和实际效果展示了解决滚动穿透的方法。

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

在前端的开发中,经常会遇到长页面和弹框,触发弹框,会出现遮罩层后面的页面依旧可以滚动,此时就出现了滚动穿透,如何处理呢?

解决方法:
触发弹框时,给最外层的div添加样式
话不多说,上代码

	.prevent_touch_move_box {
		position: fixed ;
		overflow: hidden;
		width: 100%;
		height: 100%;
		top: 0;
		left: 0;
	}

示例:

<template>
	<!-- 最外层 -->
	<view class="box" :class="show?'prevent_touch_move_box':''">
		<!-- 页面内容 -->
		<view class="content_box" v-for="(item,index) in 20" :key='index' @click="showMessageBox()">
			我是内容,点击我弹框
		</view>
		<!-- 弹框 -->
		<view class="message_box" v-if="show" @click="closeMessageBox()">
			<view class="elastic_frame">
				我是弹框
			</view>
		</view>
	</view>
</template>
<script>
	export default {
		data() {
			return {
				show: false
			}
		},
		methods: {
			// 显示弹框
			showMessageBox() {
				this.show = true
			},
			// 关闭弹框
			closeMessageBox() {
				this.show = false
			}
		}
	}
</script>
<style>
	/* 防止出现滚动 穿透*/
	.prevent_touch_move_box {
		position: fixed;
		overflow: hidden;
		width: 100%;
		height: 100%;
		top: 0;
		left: 0;
	}

	.box {
		width: 100%;
	}

	.content_box {
		width: 100%;
		height: 50px;
		line-height: 50px;
		text-align: center;
		background: #BBBBBB;
		margin-top: 10px;
	}

	.message_box {
		width: 100%;
		height: 100%;
		background: rgba(0, 0, 0, 0.2);
		position: fixed;
		top: 0;
		left: 0;
	}

	.elastic_frame {
		width: 100px;
		height: 60px;
		background: #FFFFFF;
		border-radius: 10rpx;
		margin: 50% auto 0;
		text-align: center;
		line-height: 60px;
	}
</style>

效果图
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值