如何在uniapp中弹出层弹出时遮住自带的tabbar

前提问题

vue3组合式API,uniapp写微信小程序,点击下方导航,点击进入导航页面,在页面点击按钮需要弹出一个弹出层,使用uniapp自带的uni-popup,进行弹出,uniapp自带的tabbar层级较高,无法遮挡,导弹出层底部依旧存在下方导航栏

解决过程

1.uni-popup弹出层实现
2.在无法遮挡的情况下考虑在弹出层弹出时,tabbar不显示,弹出层关闭时,tabbar不显示
3.弹出层打开或关闭的提示同时隐藏或显示tabbar,会出现弹出层未关闭完全时,tabbar已经出现,影响交互体验
4.弹出层会在弹出层内部内容上下滑动时有时会引起整体弹出层上下动的现象,要固定住弹出层
5.弹出层弹出后,不仅弹出层可以进行滑动和点击,遮罩层下的数据也可以滑动

解决结果

1.实现uni-popup弹出层
页面代码

//点击按钮
<view  @click="toggle('bottom')">全部任务</view>
<!-- 全部任务-弹出层 -->
<uni-popup ref="popupCoupon" background-color="none" @change="popupChange" @touchmove.stop.prevent="emptyEvent">
		<view class="popup-content popupBottom">
			<!-- 弹出层按钮区域 -->
			<view class="popupBtn">
				<view class="popupBtnL" @click="closePopup">
					取消
				</view>
				<view class="popupBtnTitle">
					选择任务状态
				</view>
				<view class="popupBtnR" @click="confirmPopup">
					确定
				</view>
			</view>
			<!-- 弹出层内容区域 -->
			<view class="popupCon">
				<view class="popupConAll" v-for="(item, index) in state.taskStateData" :key="item.code">
					<view class="popupConItem" @click="popupSelect(item)">
						<view :class="state.taskState === item.code?'popupConICT':'popupConICF'">{{item.value}}</view> 
						<uni-icons type="checkmarkempty" size="20" class="popupIcon" color="#2E5BFF" v-if="state.taskState === item.code"></uni-icons>
					</view>
				</view>
			</view>
		</view>
</uni-popup>


js代码

//全部任务-底部弹出层
const popupCoupon = ref(null)
const toggle = () =>{
	// open 方法传入参数 等同在 uni-popup 组件上绑定 type属性
	popupCoupon.value.open('bottom')
}
//弹出层-选中任务状态
const popupSelect = el =>{
	
}
//关闭弹出层
const closePopup = () =>{
	popupCoupon.value.close()
}
//弹出层确认
const confirmPopup = () => {
	//关闭弹出层
	popupCoupon.value.close()
}


css代码

.popupBottom {
	height: 650rpx;
	overflow: hidden;
	position: fixed;
	bottom: 0;
	left: 0;
	right: 0;
	padding: 10rpx 20rpx;
	border-radius: 20rpx 20rpx 0 0;
	background-color: #fff;
}
.popupBtn{
	display: flex;
	align-items: center;
	justify-content: space-between;
	height: 10%;
}
.popupBtnL{
	color: #666666;
}
.popupBtnTtitle{
	font-size: 30rpx;
	font-weight: 500;
	color: #202020;
}
.popupBtnR{
	color: #2E5BFF;
}
.popupConAll{
	display: flex;
	flex-direction: column;
	margin: 10rpx 0;
}
.popupConItem{
	display: flex;
	align-items: center;
	margin: 10rpx 0;
}

2.显示或隐藏uniapp自带的tabbar
页面代码


js代码

//通过弹窗显隐控制导航栏的显示和隐藏
const popupChange = e =>{
	if(e.show){
        //隐藏tabbar
		uni.hideTabBar()
	}else{
        //显示tabbar
		uni.showTabBar()
	}
	state.searchIcon = e.show
}

3.延时关闭tabbar,提高交互体验

//通过弹窗显隐控制导航栏的显示和隐藏
const popupChange = e =>{
	if(e.show){
		uni.hideTabBar()
	}else{
		setTimeout(()=>{
			uni.showTabBar()
		},300)
	}
	state.searchIcon = e.show
}

4.固定弹出层,避免上下滑动
position: fixed;bottom: 0;left: 0;right: 0;将弹出层固定在底部
页面代码


css代码 

.popupBottom {
	height: 650rpx;
	overflow: hidden;
	position: fixed;
	bottom: 0;
	left: 0;
	right: 0;
	padding: 10rpx 20rpx;
	border-radius: 20rpx 20rpx 0 0;
	background-color: #fff;
}

5.阻止遮罩层默认滚动事件操作
页面代码


js代码

//空事件,阻止遮罩层的穿透事件
const emptyEvent = () => {
}

就先记录到这里吧~

欢迎大家帮忙补充~~

  • 10
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值