微信小程序使用vant4 weapp自定义菜单 但是弹出层却被菜单遮挡的解决办法

最终方案:通过 getTabBar() 直接控制自定义组件显隐

核心思路:wx.hideTabBar() 对自定义 tabBar 不生效,改用 this.getTabBar() 拿到组件实例,直接改其 data,再由 wx:if 驱动显隐。


涉及 3 个文件、共 4 处改动:

custom-tab-bar/index.js --- 第 5 行、第 18-19 行

javascript

复制代码
data: {
  visible: true,   // ← 新增:显隐开关
  // ...
},

pageLifetimes: {
  show() {
    this.setData({ visible: true })  // ← 新增:每次进页面自动恢复
    // ...
  }
}

custom-tab-bar/index.wxml --- 第 1 行

xml

复制代码
<!-- 原来 -->
<view class="tab-bar" wx:if="{{userType}}">

<!-- 改为 -->
<view class="tab-bar" wx:if="{{userType && visible}}">

guarantee-mission.js --- 第 117-120 行、第 143-148 行

javascript

复制代码
// 打开弹窗 → 隐藏菜单
onShowGuaranteeMissionDetail(e) {
  // ...
  const tabBar = this.getTabBar()
  if (tabBar) {
    tabBar.setData({ visible: false })  // 菜单消失
  }
  this.setData({ showGuaranteeMissionDetail: true })  // 弹出弹窗
}

// 关闭弹窗 → 恢复菜单
onCloseGuaranteeMissionDetail() {
  const tabBar = this.getTabBar()
  if (tabBar) {
    tabBar.setData({ visible: true })   // 菜单恢复
  }
  this.setData({ showGuaranteeMissionDetail: false })
}

执行效果

code

复制代码
点击卡片 → getTabBar() 获取组件 → setData({visible: false})
         → wx:if 条件变 false → 底部菜单从 DOM 移除
         → 弹窗弹出

关闭弹窗 → getTabBar() → setData({visible: true})
         → wx:if 条件变 true → 底部菜单恢复

这就是最终生效的方案。


进一步改进:使用监听的方式,不用一个个写:

核心原理就是 observers 数据监听:当任意一个 showXxxPopup 从 false 变为 true 时,observer 自动触发,将 tabBar 设为 hidden;当所有弹窗都恢复 false 时,tabBar 自动恢复。

两种实现:

页面 方式

任务页 独立 behavior tab-bar-control.js,监听 30+ 个弹窗字段

首页 直接在 Page 的 observers 里监听 showDetailPopup, showPunchModal

这样做的好处:

各 behavior 不再需要手动写 getTabBar().setData({ visible: ... }) --- 已全部删除

以后新增弹窗,只需在 observer 的字段列表里加一个名字即可

相关推荐
静Yu2 小时前
从一个九宫格素材小程序,看轻量工具产品该如何优化体验
前端·微信小程序
小羊Yveesss5 小时前
2026年微信小程序制作工具怎么选?
微信小程序·小程序
河北清兮网络科技7 小时前
深度解析:2026石家庄短视频APP开发真实成本、隐性开销与避坑方案
大数据·小程序·app·短剧app·广告联盟
微擎应用7 小时前
宠物门店系统 - 连锁宠物医院多门店小程序+公众号双端管理系统
小程序·宠物
脱脱克克8 小时前
使用 TRAE / VS Code + DeepSeek V4 开发微信小程序、网页
微信小程序·ai编程·环境配置
2501_915921438 小时前
uni-app 上架 iOS 的完整流程(无需依赖 Mac)
android·macos·ios·小程序·uni-app·iphone·webview
前端 贾公子8 小时前
使用 wxappUnpacker 工具进行 MAC 微信小程序反编译
macos·微信小程序·小程序
CRMEB系统商城21 小时前
CRMEB多商户系统(Java)v2.3公测版发布
java·开发语言·人工智能·小程序·开源·php
嫂子的姐夫1 天前
050-wx小程序合肥住房
爬虫·python·小程序·逆向