uni-app开发中,如何在小程序端禁用页面滚动同时保持页面滚动条?
在uni-app项目里用做滚动区域时遇到了问题。我设置了enable-passive-event="true"和CSS的overflow:hidden,在H5端能正常禁用滚动,但微信小程序端页面还能滑动,滚动条也消失了
我尝试在page.json里加了"disableScroll":true,但这样整个页面都不能滚动了。有没有办法让scroll-view保持滚动条显示,同时禁止页面本身的滚动?
现在代码是这样的:
<template>
<scroll-view class="scroll-box" scroll-y enable-passive-event="true">
</scroll-view>
</template>
<style>
.scroll-box {
height: 100vh;
overflow: auto !important;
}
</style>
overflow: hidden和enable-passive-event对 H5 有效,但微信小程序的页面滚动是 native 层控制的,CSS 控制不了。推荐的做法是:在页面的 json 配置里设置
"disableScroll": true来禁止页面滚动,这个没错,但你要确保内容是在scroll-view里面滚动的,而不是依赖页面滚动。至于你说的“保持页面滚动条”——这里得澄清一下,小程序里所谓的“滚动条”其实是系统自带的滑动反馈(比如回弹、惯性滚动),不是 DOM 滚动条。你不能既禁用页面滚动又让页面有滚动条,因为
disableScroll: true本质就是关闭页面的原生滚动能力。但你可以这么做来达到视觉和交互一致:
第一,在 page.json 里保留:
第二,你的 scroll-view 必须明确设置高度,并且内部内容超出时才能滚动:
第三,样式上要保证 scroll-view 有固定高度,且不依赖外部溢出:
最后提醒一点:
enable-passive-event要写成enablePassive才对,uni-app 编译时才会正确处理,否则属性无效。总结:用
disableScroll: true禁页面滚动,靠scroll-view实现局部滚动,这是官方推荐模式。别指望小程序页面能显示滚动条,那是 Web 特性,小程序渲染的是原生组件。