更新记录
1.0.0(2026-09-09)
下载此版本
- 首次发布:快捷功能导航组件(图标 + 文字入口)
- 超过一屏数量自动横向滚动,项宽按容器宽度与
maxPerRow 动态计算,保证一屏刚好展示 maxPerRow 个
- 可配置:每屏数量、图标宽高与 mode、文案颜色字号、项间距、是否显示滚动条
- 支持
#icon / #item 插槽自定义内容,支持 click 事件回传项数据与索引
平台兼容性
uni-app(5.24)
| Vue2 |
Vue3 |
Chrome |
Safari |
app-vue |
app-nvue |
Android |
iOS |
鸿蒙 |
| √ |
√ |
√ |
√ |
√ |
- |
√ |
√ |
√ |
| 微信小程序 |
支付宝小程序 |
抖音小程序 |
百度小程序 |
快手小程序 |
京东小程序 |
鸿蒙元服务 |
QQ小程序 |
飞书小程序 |
小红书小程序 |
快应用-华为 |
快应用-联盟 |
| √ |
√ |
√ |
√ |
√ |
√ |
√ |
√ |
√ |
√ |
√ |
√ |
其他
Quick Nav 快捷功能导航
一款基于 uni-app(Vue3)的快捷功能导航组件(图标 + 文字入口)。功能项较少时等分布局,超过一屏数量时自动横向滚动,项宽动态计算保证一屏刚好展示指定个数,开箱即用。
🚀 功能特性
- ✅ 自动横向滚动:项数超过
maxPerRow 时自动切换为横向滚动,项宽按容器实测宽度动态计算,保证一屏刚好展示 maxPerRow 个,第 maxPerRow + 1 个在屏幕外
- ✅ 可配置项丰富:每屏数量(
maxPerRow)、图标宽高与 mode(iconSize / iconMode)、文案颜色字号(nameColor / nameFontSize)、项间距(gap)、是否显示滚动条(showScrollbar)
- ✅ 字段可自定义:通过
nameKey / iconKey 指定从数据项中取文案与图标的字段,默认兼容 { name, icon } 结构
- ✅ 插槽自由:
#icon 可单独替换图标,#item 可完全自定义每一项内容
- ✅ 交互回传:点击项通过
click 事件回传该项数据与索引,跳转逻辑由业务侧处理
- ✅ 多端适配:纯 view/text + scroll-view 实现,适配 H5 / App-vue / 小程序
📦 安装引入
- 将
uni_modules/quick-nav 整个目录复制到项目的 uni_modules 目录下;
- 开启 easycom 时可直接使用
<quick-nav> 标签,无需手动引入;
- 若未开启 easycom,可在页面中手动引入:
<script setup>
import QuickNav from "@/uni_modules/quick-nav/components/quick-nav/quick-nav.vue";
</script>
🚀 快速开始
<template>
<view>
<!-- 一屏最多 4 个,超过则横向滚动 -->
<quick-nav :list="funcs" :max-per-row="4" @click="goPath" />
</view>
</template>
<script setup>
import icon1 from "@/static/func-1.png";
import icon2 from "@/static/func-2.png";
const funcs = [
{ name: "A交易", icon: icon1, url: "/pages/trade/trade" },
{ name: "B交易", icon: icon2, url: "/pages/trade/trade?tab=MARGIN" },
// ... 超过 4 个自动横向滚动
];
const goPath = (item) => {
uni.navigateTo({ url: item.url });
};
</script>
业务中常需要携带额外参数(如跳转前切换 Tab、路由参数),把这些字段放进数据项里,在 click 回调中读取即可。
🔧 Props 属性配置
| 属性名 |
类型 |
默认值 |
说明 |
list |
Array |
[] |
功能项列表,为空时组件自动隐藏 |
maxPerRow |
Number |
5 |
一屏最多展示数量,超过则允许横向滚动 |
nameKey |
String |
name |
文案取值字段 |
iconKey |
String |
icon |
图标取值字段 |
iconSize |
String |
56rpx |
图标宽高 |
iconMode |
String |
aspectFit |
图标适配模式(同 image 的 mode) |
nameColor |
String |
#161619 |
文案颜色 |
nameFontSize |
String |
22rpx |
文案字号 |
gap |
Number |
32 |
项间距(rpx),同时参与可滚动时项宽计算 |
showScrollbar |
Boolean |
true |
横向滚动时是否显示滚动条 |
📡 事件
| 事件名 |
参数 |
说明 |
click |
item, index |
点击某个功能项时触发,回传该项数据与索引 |
🎨 插槽
| 插槽名 |
作用域 |
说明 |
icon |
{ item } |
自定义图标内容(图片/emoji/自定义视图) |
item |
{ item, index } |
完全自定义每一项内容(替代图标+文案默认结构) |
<quick-nav :list="funcs" @click="goPath">
<template #icon="{ item }">
<image :src="item.icon" style="width: 64rpx; height: 64rpx" mode="aspectFit" />
</template>
</quick-nav>
🎨 样式自定义
组件内部类可在外部覆盖(scoped 样式需 :deep() 穿透):
| 类名 |
说明 |
.qn-scroll |
scroll-view 容器 |
.qn-grid |
功能项网格(qn-grid--scrollable 为横向滚动态) |
.qn-item |
单个功能项(纵向:图标 + 文案) |
.qn-icon |
默认图标图片 |
.qn-name |
文案文字 |
⚠️ 使用注意事项
- 项宽自动测量:可滚动时组件会实测容器宽度来计算每项宽度,因此「一屏几个」在不同页面内边距下均准确;个别无法测量到的场景会回退为按「屏幕宽度 − 64rpx(容器左右内边距)」估算
- 空列表自动隐藏:
list 为空时不渲染任何内容
- 避免与组件标签同名:页面(
<script setup>)内不要定义与标签同名的局部变量(如 quickNav),否则 <quick-nav> 会被解析成该局部变量而非组件
- 数据更新:
list 数量变化触发重新测量;图标/文案字段变化直接响应式更新
📞 更新日志
见 changelog.md。
祝您使用愉快! 🎉