uni-app 弹出层uni-popup的实现以及禁止遮盖层页下的页面滑动

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

提示:最近入职新公司负责小程序的研发,小程序是用uni-app研发的。中间有这样一个场景:点击“案例详情” 弹框展示案例内容。但是这个时候用户滑动弹框内部的内容的时候,遮盖层页面也会跟着滑动。查看uni-app 官网提示说现在前端存在这样的问题,需要用户自己想办法解决。于是就有了这篇博客。

一、代码演示

页面代码(可以直接使用):

<template>
  <custom-container >
    <view class="page-body" 
                @touchend="end" 
                @touchmove="move"
                :class={popupShow:popupShow}">

      <view class="infoB-6" @click="showExample">点击这里可以弹框</view>
 
       <!-- 弹框页面 -->
      <uni-popup ref="planPopupShow"
                 style="z-index: 999;" 
                 catchtouchmove="true" 
                 @maskClick="onMaskClick">
        <view class="plan-popup-title">
          <view class="A-text">uni-app弹出页面效果</view>
          <view class="info-show">
            <text>姓名:uni-app</text>
            <text>背景:程序员</text>
            <text>类型:国企</text>
            <text>&nbsp;&nbsp;</text>
            <textarea rows="6" readonly class="custom-textarea">
                   测试弹框========================》
                   测试弹框========================》
                   测试弹框========================》
                   测试弹框========================》
                   测试弹框========================》
                   测试弹框========================》
            </textarea>
          </view>
        </view>
      </uni-popup>

      </view>
  </custom-container>
</template>


<script>
const moduleName='oneVipCoach'
import {
  mapState,
  mapGetters,
} from 'vuex'

export default {
  data() {
    return {
      popupShow:false
    };
  },

  methods:{
    showExample(){
      this.$refs.planPopupShow.open()
      // 弹出框显示时,禁止页面滚动
      this.popupShow = true;
    },
    onMaskClick() {
      console.log('遮罩层被点击触发关闭弹出框');
      this.popupShow = false;
      this.$refs.planPopupShow.close();
    }

  }
}
</script>

<style lang="scss" scoped>
 .popupShow {
   overflow: hidden;
   position: fixed;
  }

  .plan-popup-title{
    width: 690upx;
    height: 100%;
    background: rgba(46, 49, 66, 1);
    border-radius: 20px;
    padding-bottom: 20upx;
    border: 1upx solid red;
    font-size: 24upx;
    float: left;
    .A-text {
      height: 60upx;
      width: 690upx;
      border: 1upx solid green;
      margin-top: 62upx;
      opacity: 1;
      /** 文本1 */
      font-size: 36upx;
      font-weight: 600;
      letter-spacing: 0upx;
      line-height: 47.74upx;
      margin-bottom: 30upx;
      text-align: center;
      vertical-align: top;
      background: linear-gradient(to right, rgb(242, 245, 196), rgb(247, 205, 166));
      -webkit-background-clip: text;
      -webkit-text-fill-color: transparent;
    }

    .info-show{
      width: 640upx;
      height: 800upx;
      margin-left: 25upx;
      line-height: 46upx;
      .custom-textarea{
        width: 100%;
        color: white;
        height: auto;
        border: 1upx solid red;
        overflow-y: auto; /* 当内容超过四行时,启用垂直滚动 */
        max-height: 13em; /* 控制最大高度,假设每行高度约为1.5em */
        //line-height: 1.62em; /* 行高 */
      }
      text{
        width: 100%;
        border: 1upx solid red;
        float: left;
        color: white;
      }
  }

</style>




二、部分代码介绍注意事项

1.在“uni-popup” 最外层设置两个事件

  • @touchend="end"        手指离开屏幕时触发的事件
  • @touchmove="move"   手指在屏幕上移动时触发的事件
  • :class="{popupShow:popupShow}"  自定义当前页面是否可以滑动的样式
    • 默认设置:在data 中设置popupShow:false

2.动态添加或者删除相关滑动静止事件

  • catchtouchmove = true  阻止浏览器的默认滚动行为,使得页面在触摸移动时不会滚动
  • @maskClick="onMaskClick" 点击遮盖层事件监听。然后修改popupShow的状态

3. 注意事项

  • 对组件uni-popup 遮盖层的事件监听 尽量使用maskClick 不要使用close、change 事件这两个事件很容易导致事件冒泡
  • 注意组件放置的位置 不要放置到当前页面节点以为 避免无法渲染CSS

总结
以上就是今天要讲的内容,本文仅仅简单介绍了uni-popup的使用示例,以及如何解决遮盖层下面的页面滑动问题。示例代码可以直接使用。

如果帮助到你的话点点收藏和关注

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值