vue-mini-navbar
vue-mini-navbar
兼容 Vue2 / Vue3 / uni-app / 微信小程序原生 的小程序顶部距离信息插件,服务于「自定义顶部导航栏」布局场景。同步返回状态栏高度、胶囊按钮位置、导航栏高度、安全区等信息,结果自动本地缓存(二次调用零开销),TypeScript 编写。
自定义导航栏示例(uni-app)
真机效果(iPhone:状态栏 47px,底部安全区 34px,左侧返回胶囊与右上角胶囊同高对称):

安装
npm install vue-mini-navbar
快速开始
Vue3(含 uni-app Vue3 项目)
// main.js
import { createApp } from 'vue'
import VueMiniNavbar from 'vue-mini-navbar'
import App from './App.vue'
createApp(App).use(VueMiniNavbar).mount('#app')
<script setup>
// 组合式 API
import { useTopBarInfo } from 'vue-mini-navbar'
const topBarInfo = useTopBarInfo()
const info = topBarInfo()
// 或选项式:this.$topBarInfo()
</script>
Vue2(含 uni-app Vue2 项目)
// main.js
import Vue from 'vue'
import VueMiniNavbar from 'vue-mini-navbar'
Vue.use(VueMiniNavbar)
// 任意组件中
// this.$topBarInfo()
微信小程序原生
// 无需 install,直接引入函数
import { getTopBarInfo } from 'vue-mini-navbar'
Page({
data: { navBarHeight: 0, statusBarHeight: 0 },
onLoad() {
const info = getTopBarInfo()
this.setData({
statusBarHeight: info.statusBarHeight,
navBarHeight: info.navBarHeight
})
}
})
API
getTopBarInfo(options?: { refresh?: boolean }): TopBarInfo
默认先读本地缓存(uni / wx storage),命中且校验通过直接返回;未命中则重新计算并写回本地。
refresh: true:跳过缓存强制重算并覆盖本地,用于横竖屏切换、onResize后
useTopBarInfo(): (options?) => TopBarInfo
组合式 API,行为与 getTopBarInfo 一致。
clearTopBarInfoCache(): void
清除本地缓存条目(调试用)。
computeTopBarInfo(): TopBarInfo
底层纯函数,跳过缓存直接计算(一般不直接使用)。
返回对象(TopBarInfo)
所有距离单位均为 px:
| 字段 | 类型 | 说明 |
|---|---|---|
statusBarHeight |
number |
状态栏高度 |
menuButton |
MenuButtonRect | null |
胶囊按钮位置(微信小程序专有;支付宝 / H5 等无胶囊平台为 null) |
leftCapsule |
LeftCapsuleRect | null |
自定义左侧胶囊(返回键 / 首页按钮)的建议位置与尺寸:与右侧胶囊同高对齐,左边距 = 屏幕宽 - 右侧胶囊 right(左右对称);无胶囊平台为 null |
navBarHeight |
number |
自定义导航栏应设高度。公式:(menuButton.top - statusBarHeight) * 2 + menuButton.height;无胶囊平台兜底 44 |
totalTopHeight |
number |
顶部总占位高度 = statusBarHeight + navBarHeight,可直接用于页面 padding-top 或自定义 navbar 定位 |
safeAreaBottom |
number |
底部安全区高度(iPhone 横条 Home 指示器等);优先取 safeAreaInsets,缺失时由 safeArea 矩形推导(screenHeight - safeArea.bottom),取不到为 0 |
safeAreaInsets |
SafeAreaInsets | null |
完整安全区内边距,解析规则同上 |
windowWidth / windowHeight / screenHeight / pixelRatio |
number |
窗口与设备信息 |
platform / brand / model / version / sdkVersion |
string |
平台与宿主信息 |
平台与缓存说明
- 环境探测优先级(与兄弟插件
vue-local-cache一致):窗口信息uni.getWindowInfo()→uni.getSystemInfoSync()→wx.getWindowInfo()→wx.getSystemInfoSync()→ H5window兜底;胶囊uni.getMenuButtonBoundingClientRect()→wx.getMenuButtonBoundingClientRect() - 本地缓存:key 为
vue-mini-navbar:topbar-info,结构带版本号{ v, data },版本不匹配或数据损坏自动重新计算 - 容错风格:所有平台 API 调用 try/catch 静默兜底,任何字段取不到时给默认值,不抛错
License
MIT
Related Packages
@uni_toolkit/webpack-plugin-component-config
一个用于 UniApp 项目的 Webpack 插件,用于处理 Vue 文件中的 `<component-config>`...
6,153
30
@uni_toolkit/webpack-plugin-component-insight
一个用于 uni-app Vue2 项目的 Webpack 插件,用于分析组件被哪些页面使用、使用了多...
2,399
30
@trtc/calls-uikit-wx-uniapp
TUICallKit WeChat mini-program UIKit for UniApp (Vue 2 & Vue 3 + @trtc/call-engi...
4,622
251
@uni_toolkit/vite-plugin-component-config
一个用于 UniApp 项目的 Vite 插件,用于处理 Vue 文件中的 `<component-config>` 标...
5,870
30
Version History
| Version | Released | Vue | License |
|---|---|---|---|
| 1.0.7 | ^2.7.0 || | MIT | |
| 1.0.6 | ^2.7.0 || | MIT | |
| 1.0.5 | ^2.7.0 || | MIT | |
| 1.0.4 | ^2.7.0 || | MIT | |
| 1.0.3 | ^2.7.0 || | MIT | |
| 1.0.2 | ^2.7.0 || | MIT | |
| 1.0.1 | ^2.7.0 || | MIT | |
| 1.0.0 | ^2.7.0 || | MIT |