微信小程序 - 解决弹框遮罩层的滚动穿透问题

在这里插入图片描述

在小程序页面里有自定义弹窗时候,发现弹窗外滚动的时候,底部背景页面也会跟随滚动。面对这个bug,我们可以用下面几种方法实现:

方法1:catchtouchmove=“true”

可以实现弹框背景不滚动,但是也会导致弹框自身无法滚动。
如果你的弹窗本身是不需要滚动的,用这个方法是极佳的。
ps:开发工具测试无效,真机上有效

<!-- 页面 -->
<view class="page">
    <button bindtap="showAction">点击出现弹框</button>
</view>

<!-- 弹框 -->
<view catchtouchmove="true">
  <view class="mask" wx:if="{{popup}}"></view>
  <view class="half-screen-dialog {{popup?'half-screen-dialog_show':''}}"></view>
</view>
.page {
  width: 100%;
  height: 20000rpx;
  background-color: pink;
}

方法2:使用scroll-view包裹底部内容区

<!-- 页面 -->
<scroll-view class="page" scroll-y="{{true}}" scroll-x="{{false}}" enhanced="{{true}}" bounces="{{false}}">
  <view style="height: 3000rpx;background: green;">
    <button bindtap="showAction">点击出现弹框</button>
  </view>
</scroll-view>

<!-- 弹框 -->
<view>
  <view class="mask" wx:if="{{popup}}"></view>
  <view class="half-screen-dialog {{popup?'half-screen-dialog_show':''}}">
    <view style="height: 3000rpx;background: red;"></view>
  </view>
</view>
.page {
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  overflow-y: auto;
}

方法3:弹框出现的时候,将底部背景页面的高度设置为100vh

<!-- 页面 -->
<view class="{{popup ? 'page-overflow-hidden' : ''}}">
  <view style="height: 3000rpx;background: green;">
    <button bindtap="showAction">点击出现弹框</button>
  </view>
</view>

<!-- 弹框 -->
<view>
  <view class="mask" wx:if="{{popup}}"></view>
  <view class="half-screen-dialog {{popup?'half-screen-dialog_show':''}}">
    <view style="height: 3000rpx;background: red;"></view>
  </view>
</view>
.page-overflow-hidden {
  height: 100vh;
  overflow: hidden;
}

相同的弹框样式如下:

.mask {
  position: fixed;
  z-index: 1000;
  top: 0;
  right: 0;
  left: 0;
  bottom: 0;
  background: rgba(0, 0, 0, 0.6);
}

.half-screen-dialog {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  height: 75%;
  z-index: 5000;
  line-height: 1.4;
  background-color: #FFFFFF;
  border-top-left-radius: 24rpx;
  border-top-right-radius: 24rpx;
  overflow-y: auto;
  transition: transform .3s;
  transform: translateY(100%);
}

.half-screen-dialog_show {
  transform: translateY(0%);
}

相同的js如下:

Page({
  data: {
    popup: false
  },
  showAction() {
    this.setData({
      popup: true
    });
  },
})
  • 9
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
微信小程序的picker弹框日期没有跟着对应变化可能是由于以下几个原因: 1. 数据绑定问题:在小程序中使用picker弹框选择日期时,需要将选择的日期值与对应的数据变量进行绑定。如果没有正确绑定,就导致选择的日期没有实时更新。 2. 事件监听问题小程序中的picker弹框选择日期是通过触发事件来获取选择的日期值的。如果事件监听的逻辑有误,可能导致选择的日期没有对应的变化。 3. 数据源更新问题:如果在picker弹框显示之前,数据源的值已经确定,并且在弹框显示之后数据源的值没有更新,那么选择的日期就不有相应的变化。 为了解决这个问题,我们可以检查以下几个方面: 1. 确保数据绑定正确:在picker弹框选择日期时,确保已经正确绑定了选择的日期值与对应的数据变量。可以通过在页面中使用data属性来定义数据变量,然后在picker事件中将选择的日期值赋给数据变量。 2. 检查事件监听逻辑:确保事件监听的逻辑正确,并且能够获取到选择的日期值。可以在监听事件中打印选择的日期值,以确保事件监听正常。 3. 更新数据源:如果数据源在picker弹框显示之前已经确定,并且在弹框显示之后需要更新数据源的值,可以在更新数据源后手动更新picker显示的值。 通过检查并解决以上可能存在的问题,应该能够确保微信小程序的picker弹框日期能够跟着对应变化。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值