微信小程序如何禁止页面的滚动

现在是有弹出悬浮窗
希望下层不能滚动

clipboard.png

阅读 58.7k
7 个回答

在模态框上加上catchtouchmove='true' 就好了啊 其他地方找到的

我也遇到这个问题了。。可以参考帖子
https://www.jianshu.com/p/602...

1.整个布局用<scroll-view>作为根节点包裹所有view,并动态绑定scroll-view的scroll-y属性<scroll-view scroll-y="{{isScroll}}">
2.样式文件中设置Page的overflow-y属性值为hidden
3.样式文件中设置scroll-view的height属性值为100%
4.打开自定义弹窗的点击事件中,更改isScroll的值为false,关闭弹窗的点击事件中,更改isScroll的值为true

刚刚已经解决了,很好用哦!

如果没有下拉刷新呢,用上面的方法还是可以的,上面的方法是针对了page设置全局的哦,对于有滚动事件,比如下拉刷新或者上拉加载的是不适用的哦,今天又试了一下更简单的方法哦。在外层添加一个view
<view class='page' style='height:{{clientHeight}};overflow:{{overflow}};'> 然后动态算出设备高度, wx.getSystemInfo windowHeight 。就可以啦,直接控制外层view的overflow

禁用touchmove事件

新手上路,请多包涵

最外层加一个view 设置高度为100vh添加overflow:hidden
就可以了 百试不爽

新手上路,请多包涵

再wxss里面添加

 page {
   overflow: hidden
 }

就可以。可惜js不能直接改wxss,或者再wxml里面引入style. 不如网页来得方便

给弹窗最外层view加catchtouchmove="true"
如果弹窗里面需要滚动,就使用scroll-view

新手上路,请多包涵

提供一个比较通用的解决方案

通过 wxs实现动态控制滚动行为
下面的例子是uni-app的,原生小程序、Taro方案基本一致

<template>
  <view class="modal" @touchmove="wxs.touchmove" :data-prevent="prevent">
    <scroll-view scroll-y>
      // 使用scroll-view包裹内部可滚动内容
    </scroll-view>
  </view>
<template>

<script module="wxs" lang="wxs">
function touchmove(event, ins) {
  var data = ins.selectComponent('.modal').getDataset()
  if (data.prevent) {
    return false
  }
}
module.exports = {
  touchmove: touchmove,
}
</script>

<script>
export default {
  name: 'Demo',
  data() {
    prevent: false, // 禁用滚动开关
  },
  methods: {
    disable() {
      this.prevent = false
    },
  },
}
</script>
推荐问题
宣传栏