千家信息网

微信小程序开发中怎么自定义导航栏

发表于:2025-11-12 作者:千家信息网编辑
千家信息网最后更新 2025年11月12日,这篇文章主要介绍了微信小程序开发中怎么自定义导航栏的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇微信小程序开发中怎么自定义导航栏文章都会有所收获,下面我们一起来看看吧。C
千家信息网最后更新 2025年11月12日微信小程序开发中怎么自定义导航栏

这篇文章主要介绍了微信小程序开发中怎么自定义导航栏的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇微信小程序开发中怎么自定义导航栏文章都会有所收获,下面我们一起来看看吧。

CustomNavBar.wxml

CustomNavBar.wxss

.custom-navbar-con { position: relative; width: 100%; background-color: white; z-index: 9999; }.custom-navbar-con .custom-navbar-statusbar-con { width: 100%; }.custom-navbar-con .custom-navbar-content { width: 100%; }.custom-navbar-con .custom-navbar-left-menu-con { position: absolute; }.custom-navbar-con .custom-navbar-left-menu-con .custom-navbar-icon-btn { height: 100%; border-radius: 200px; border: 1px solid rgba(220, 220, 220, 0.6); }.custom-navbar-con .custom-navbar-left-menu-con .custom-navbar-icon-btn .icon { height: 90%; margin-top: 2.5%; }.custom-navbar-con .custom-navbar-left-menu-con .custom-navbar-icon-btn .text { font-size: 27rpx; }.custom-navbar-con .custom-navbar-left-menu-con .custom-navbar-icon-btn.back { border: none; }.custom-navbar-con .custom-navbar-left-menu-con .custom-navbar-icon-btn.back~.custom-navbar-icon-btn.home { margin-left: 10rpx; }.custom-navbar-con .custom-navbar-left-menu-con .custom-navbar-icon-btn.switch-shop { padding-left: 5px; padding-right: 25rpx; }.custom-navbar-con.ios .custom-navbar-title.android { display: none; }.custom-navbar-con.android .custom-navbar-title.ios { display: none; }.custom-navbar-con .custom-navbar-title.ios { font-weight: bold; text-align: center; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); -webkit-transform: translate(-50%, -50%); }.custom-navbar-con .custom-navbar-title.android { padding-left: 30rpx; }```

CustomNavBar.js

```javascriptmodule.exports = function(PageInstance) { let App = getApp() let _tplData = { _CustomNavBar_: {  navRightMenuRect: App.NavRightMenuRect,  navRightMenuCenterY: App.NavRightMenuCenterY,  statusBarHeight: App.StatusBarHeight,  winWidth: App.WinWidth,  winHeight: App.WinHeight,  iOS: App.iOS,  navTitle: '', // 当前只合适短标题,如需长标题,建议隐藏自定义导航栏,自定义展示  navHeight: App.CustomNavHeight,  needFixed: false,  showNavBar: !App.NavRightMenuRect ? false : true,  showLeftMenu: true,  showBackBtn: true,  showHomeBtn: false } } let _tplMethods = { customNavBarBack() {  wx.navigateBack() }, customNavBarBackToHome() {  let url = '/pages/index/index'  wx.reLaunch({  url: url  }) } } let isIndexPage = !!(PageInstance.route == 'pages/index/index') let pages = getCurrentPages() if (pages.length == 1) { _tplData._CustomNavBar_.showBackBtn = false _tplData._CustomNavBar_.showHomeBtn = !isIndexPage } // 每个页面 可单独配置自定义导航栏 if (PageInstance.data.CustomNavBarConfig) { Object.assign(_tplData._CustomNavBar_, PageInstance.data.CustomNavBarConfig) } // !!!! 最后执行 // 当无法获取到右上角按钮胶囊的布局位置时,强制设置自定义导航栏为隐藏状态 if (!App.NavRightMenuRect) { _tplData._CustomNavBar_.showNavBar = false } Object.assign(PageInstance, _tplMethods) PageInstance.setData(_tplData) return this}

app.js的配置

// 自定义导航栏import CustomNavBar from './template/CustomNavBar/CustomNavBar'; App({ //自定义 模板式 组件 CustomNavBar,  // 系统信息  WinWidth: 0,  WinHeight: 0,  StatusBarHeight: 0,  PixelRatio: 1,  SystemFullName: '',  SystemVersion: '',  SystemSDKVersion: '',  //自定义导航栏相关  NavRightMenuRect: null,  NavRightMenuCenterY: 0,  CustomNavHeight: 0,   onLaunch: function (options) { let self = this let systemInfo = wx.getSystemInfoSync() self.iOS = systemInfo.platform === 'ios' self.isDebug = systemInfo.platform === 'devtools' if (self.isDebug) {  // 单纯为了在开发工具下调试 自定义导航栏  // 开发工具下不存在App版本号的区分  systemInfo.version = '7.0.0' } self.WinWidth = systemInfo.windowWidth self.WinHeight = systemInfo.windowHeight self.StatusBarHeight = systemInfo.statusBarHeight // 部分小程序库版本没有返回状态栏高度 if (!self.StatusBarHeight) {  self.StatusBarHeight = 20 } self.PixelRatio = Math.max(systemInfo.pixelRatio, 2) self.SystemFullName = systemInfo.system self.SystemVersion = systemInfo.version self.SystemSDKVersion = systemInfo.SDKVersion // app.json全局配置的自定义导航栏的话,客户端需求版本为6.6.0 // 每个页面 单独配置的自定义导航栏的话,客户端需求版本为7.0.0 // wx.getMenuButtonBoundingClientRect方法,要求基础库版本为2.1.0 if (self.compareVersion(self.SystemVersion, '6.6.0') >= 0) {  // 官方的6.6.0版本以上客户端,最低基础库版本为1.9.4  // 6.6.0以上且[1.9.4 - 2.1.0]范围内的机型无法使用wx.getMenuButtonBoundingClientRect  // 所以手动写死非全面屏手机的适配胶囊布局位置  self.NavRightMenuRect = {  top: 26,  bottom: 58,  right: self.WinWidth - 10,  width: 87,  height: 32  }  // 如果系统信息返回的状态栏高度大于20,认为是全面屏手机  if (self.StatusBarHeight > 20) {  self.NavRightMenuRect.top = 50  self.NavRightMenuRect.bottom = 82  }  // 2019年08月21日22:09:22  // 微信小程序库出现bug,导致部分机型wx.getMenuButtonBoundingClientRect无返回值  // 所以在这之前先默认写死一个NavRightMenuRect,防止全局的自定义导航栏已经隐藏了但是无法显示自定义导航栏  // 详见https://developers.weixin.qq.com/community/develop/doc/00062238d78e880aedd88b72351c00  if (wx.getMenuButtonBoundingClientRect) {  let NavRightMenuRect = wx.getMenuButtonBoundingClientRect()  self.NavRightMenuRect = {   top: NavRightMenuRect.top,   bottom: NavRightMenuRect.bottom,   right: NavRightMenuRect.right,   width: NavRightMenuRect.width,   height: NavRightMenuRect.height  }  }  self.NavRightMenuCenterY = self.NavRightMenuRect.top + self.NavRightMenuRect.height / 2  self.CustomNavHeight = self.NavRightMenuRect.bottom + (self.NavRightMenuRect.top - self.StatusBarHeight) } else {  self.NavRightMenuRect = null  self.CustomNavHeight = 0 } },   // 比较两个版本号 compareVersion (v1, v2) => {   v1 = v1.split('.')   v2 = v2.split('.')   const len = Math.max(v1.length, v2.length)    while (v1.length < len) {     v1.push('0')   }   while (v2.length < len) {     v2.push('0')   }    for (let i = 0; i < len; i++) {     const num1 = parseInt(v1[i])     const num2 = parseInt(v2[i])      if (num1 > num2) {       return 1     } else if (num1 < num2) {       return -1     }   }   return 0 }     }),

假如在index 页面引用

index.wxml

index.js

onLoad: function(options) {  new App.CustomNavBar(this) }

关于"微信小程序开发中怎么自定义导航栏"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"微信小程序开发中怎么自定义导航栏"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。

0