vue-mini-navbar

兼容 Vue2 与 Vue3 的小程序顶部距离信息插件,一键获取状态栏高度、胶囊按钮位置、自定义导航栏高度与安全区,结果本地缓存
1,333
Install
npm install vue-mini-navbar
Latest Version:1.0.7
Vue:2 · 3
License:MIT
Last Updated:Oct 10, 2026
Links: GitHub  ·  npm
Maintainer: isgang

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() → H5 window 兜底;胶囊 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
unocss-preset-weapp

the unocss preset for wechat miniprogram (uniapp, taro)

26,498 456
@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 || ^3.0.0 MIT
1.0.6 ^2.7.0 || ^3.0.0 MIT
1.0.5 ^2.7.0 || ^3.0.0 MIT
1.0.4 ^2.7.0 || ^3.0.0 MIT
1.0.3 ^2.7.0 || ^3.0.0 MIT