uniapp遮罩层禁止下面页面上下滑动

本文介绍了在uniapp开发中如何通过`.touchmove.stop.prevent`简单阻止遮罩层下页面的滑动,避免因使用级联组件导致的错误,提供了一种高效且不会引发额外问题的解决方案。
在使用 UniApp 开发小程序时,若要**禁止页面上下滑动**,本质是控制页面的滚动行为。这通常适用于某些全屏展示场景(如弹窗、引导页、锁定屏幕方向等),防止用户通过滑动影响界面布局或触发不必要的滚动。 --- ### ✅ 解决方法: #### 方法一:在页面的 `style` 中设置 `overflow: hidden` 通过 CSS 控制页面根元素不显示滚动条并禁止滚动。 ```vue <template> <view class="container"> <!-- 页面内容 --> <text>这是一个不能上下滑动页面</text> </view> </template> <script> export default { // 页面生命周期 onLoad() { // 可选:动态设置页面样式 } } </script> <style scoped> /* 禁止页面滚动 */ .container { height: 100vh; overflow: hidden; /* 或者使用 fixed 布局防止滚动穿透 */ } </style> ``` > 💡 注意:`.container` 必须撑满整个视口,并且设置 `overflow: hidden` 才能生效。 --- #### 方法二:使用小程序原生配置 `disableScroll: true`(推荐) UniApp 支持在页面的 `json` 配置中通过 `disableScroll` 字段来禁止页面滚动。 在对应页面的 `pages.json` 中进行如下配置: ```json { "path": "pages/index/index", "style": { "navigationBarTitleText": "首页", "disableScroll": true } } ``` > 🔔 `disableScroll: true` 是小程序平台特有功能,在微信小程序中有效,表示整个页面不允许滚动。当设置为 `true` 时,页面节点超过一屏也不会被允许滚动。 --- #### 方法三:动态控制是否可滚动(JS 控制) 你也可以通过调用小程序原生 API 动态设置滚动开关(仅支持微信小程序): ```javascript // 启用/禁用页面滚动 uni.pageScrollTo({ scrollTop: 0, duration: 0 }); // 并结合 disableScroll 静态配置或使用 hideScrollbar ``` 或者在 `onLoad` 中设置: ```vue <script> export default { onLoad() { // 禁止滚动(需配合 DOM 结构) this.$nextTick(() => { uni.hideScrollbar(); // H5 和小程序部分版本支持,非标准 API }); } } </script> ``` ⚠️ 注意:`uni.hideScrollbar()` 并不是所有平台都支持,建议优先使用 `disableScroll`。 --- ### ❗问题产生的原因: 1. **默认页面可滚动** 小程序页面如果内容高度超出屏幕,默认允许用户上下滑动查看全部内容。 2. **交互需求限制** 某些页面(如启动页、游戏界面、全屏轮播)需要固定视图,禁止用户滑动,否则会破坏 UI 体验。 3. **滚动穿透问题** 在弹出层出现时,底层页面仍可能响应滑动事件,导致“滚动穿透”。 --- ### ✅ 最佳实践建议: - 使用 `disableScroll: true` 是最直接、高效的方式,适用于静态页面。 - 若页面内部需要局部滚动,而整体不可滚动,请将内容包裹在固定高度容器内并设置 `overflow-y: auto`。 - 避免使用 `body { height: 100vh; overflow: hidden }` 这类全局样式,容易引发兼容性问题。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值