解决vue h5 遮罩滚动穿透问题

本文展示了一个使用 @touchmove.prevent 禁止触摸移动事件的简单示例,并通过 CSS 设置了元素的绝对定位及隐藏滚动条。

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

<div class="test" @touchmove.prevent></div>

@touchmove.prevent

 

body{
    position: absolute;
    overflow: hidden;
}

### 实现移动端 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 &#39;vue&#39;; const items = ref([&#39;Item 1&#39;, &#39;Item 2&#39;, ..., &#39;Item N&#39;]); </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` 类名的对象之上,从而达到预期的效果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李雪峰吖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值