移动端H5滚动穿透

在移动H5开发中,使用固定位置的蒙层时,下方内容可能会出现滚动穿透现象。本文通过示例代码展示该问题,并提供了解决方案,确保蒙层下方内容在被覆盖时不响应滚动操作。

问题描述

移动H5开发过程中,使用蒙层时,蒙层下方内容会跟随滚动,即滚动穿透。
示例代码如下,手指在屏幕上下滑动时,下方content会跟随滚动,实际上希望此时下方被遮挡,不响应任何操作:

<!DOCTYPE html>
<html>
<head>
	<title>滚动穿透</title>
	<style type="text/css">
		.layer {
			position: fixed;
			width: 100vw;
			height: 100vh;
			z-index: 9
		}

		.content {
			height: 110vh;
			width: 100vw;
		}

	</style>
</head>
<body>
<div class="layer"></div>
<div class="content">
	top
</div>
</body>
</html>

解决方案

### 实现移动端 H5 的 ScrollView 组件 为了实现在移动端 H5 中的 `ScrollView` 功能,通常会借助现有的 UI 库来简化开发过程。Vant 是一个流行的 Vue.js 移动端组件库,提供了丰富的交互控件。 #### 使用 Vant 和自定义逻辑构建 Scroll-View 通过结合 Vant 提供的基础组件以及一些额外的 CSS 属性设置,能够创建出满足需求的滚动容器[^1]: ```html <template> <div id="app"> <!-- 设置固定高度并允许内部内容溢出 --> <van-list> <ul class="custom-scroll-view"> <li v-for="(item, index) in items" :key="index">{{ item }}</li> </ul> </van-list> </div> </template> <script setup lang="ts"> import { ref } from 'vue'; const items = ref(['Item 1', 'Item 2', ..., 'Item N']); </script> <style scoped> .custom-scroll-view { max-height: 300px; overflow-y: auto; } </style> ``` 此代码片段展示了如何利用 Vant 列表组件包裹住具有特定样式的无序列表 `<ul>` 来模拟 `ScrollView` 行为。同时设置了最大高度 (`max-height`) 和垂直方向上的自动滚动(`overflow-y:auto`)属性以确保当内容超出设定范围时能正常显示滚动条。 #### 解决 iOS 设备上滚动穿透问题 对于某些场景下可能出现的滚动穿透现象——即点击弹窗或其他浮层时不希望触发背景页面的滚动行为,在 HTML 结构中可以通过监听触摸移动事件的方式阻止默认动作发生[^2]: ```html <div @touchmove.stop.prevent=""> <!-- 弹窗或者其他遮罩层的内容 --> </div> ``` 上述方法适用于防止用户在操作浮动窗口期间意外触碰到了下方不可见但仍响应手势指令的区域。 #### 隐藏 Android 和 iOS 上的原生滚动条 针对不同操作系统间存在的视觉差异特别是 iOS 系统难以完全消除掉滚动条的情况,可通过调整 Webkit 浏览器私有的CSS伪类 `-webkit-scrollbar` 完成定制化外观甚至彻底移除可见部分[^3]: ```css /* 全局隐藏 */ *::-webkit-scrollbar { display: none; } /* 或者仅限于指定元素内 */ .custom-scroll-view::-webkit-scrollbar { width: 0 !important; height: 0 !important; } ``` 以上样式规则将作用于整个文档流中的所有可滚动对象或者是被标记为 `.custom-scroll-view` 类名的对象之上,从而达到预期的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值