提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:最近入职新公司负责小程序的研发,小程序是用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> </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