# hx-navbar 适用于 uni-app 项目的头部导航组件
导航栏组件,主要用于头部导航,组件名:hx-navbar
本组件目前兼容微信小程序、H5、5+APP。
### 本组件支持模式:
1. 普通固定顶部导航
2. 透明导航
3. 透明固定顶部导航
4. 不固定普通导航
5. 背景颜色线性渐变
6. 滑动显示背景
7. 左、中、右3个插槽;可关闭左右插槽使中间插槽铺满导航,实现高度自定义的导航需求
### 提示
因为有的用户还在使用v1.0,建议前往[v1.0项目示例及文档](https://gitee.com/code_yu/hx-navbar/tree/V1.0)
### 使用前提
建议下载 示例项目 运行
### 使用方式
页面使用需在 ``` script ``` 中引用组件
``` javascript
import hxNavbar from "@/components/hx-navbar/hx-navbar"
export default {
components: {hxNavbar}
}
```
全局使用需在 ``` main.js ``` 中注册组件
``` javascript
import hxNavbar from "./components/hx-navbar/hx-navbar"
Vue.component('hx-navbar',hxNavbar)
```
### 滑动切换注意事项
必须使用 `ref` 和 `onPageScroll` 事件,否则滑动切换无效
``` html
```
``` javascript
export default {
onPageScroll(e) {
// 重点,用到滑动切换必须加上
this.$refs.hxnb.pageScroll(e);
}
}
```
### 属性
#### 基本属性
| 名称 | 类型 | 默认值 | 描述 |
| ----------------------------|--------------- | ---------------------- | ---------------------------------------------------|
| back | Boolean | true | 返回上一页,如果为首页请设置为`false`|
| backTxt | String | 返回 | 返回图标边的文字,小程序无效 |
| backTabPage | String | '' | 返回指定的 tab 页面 |
| backPage | String | '' | 返回指定的普通页面 |
| height | String | 44px | 导航栏高度(不包含状态栏高度)|
| fixed | Boolean | true | 固定头部 |
| title | String | - | 导航标题 |
| font | String | '' | 图标字体Class名,如何使用自定义图标请查看 `示例项目1` |
| fontSize | String | '18px' | 文字大小,一般不需要啊调整 |
| color | String,Array | #333333 | 文字颜色(如果需要屏幕滑动后变色,参数则为数组,例子:`['#000000','#ffffff']`) |
| backgroundColor | Array | #ffffff | 背景颜色;参数一:透明度;参数二:背景颜色(array则为```线性渐变[1,['#24bdab','#80c54c']]```) |
| slideBackgroundColor | Array | null | 滑动后背景颜色,参数一:透明度;参数二:背景颜色,长度必须和上一个一样长(array则为```线性渐变[1,['#24bdab','#80c54c']]```) |
| backgroundColorLinearDeg | String | 45 | 导航背景线性渐变角度 |
| backgroundImg | String | null | 背景图片,单一背景图`['/static/xj.jpg']`, 滑动切`['/static/xj.jpg','/static/xk.jpg',1,1]` 参数说明:第一张图片,第二张图,第一张图透明度,第二张图透明度 |
| leftButton | Obj | null | 左侧按钮,详细查看下方 ```leftButton```|
| rightButton | Obj | null | 右侧按钮,详细查看下方 ```rightButton```|
| search | Obj | null | 搜索栏,详细查看下方 ```search```|
| shadow | Boolean | false | 导航栏阴影 |
| border | Boolean | false | 导航栏边框 |
#### 关于状态栏的属性
| 名称 | 类型 | 默认值 | 描述 |
| ----------------------------|--------------- | ---------------------- | ---------------------------------------------------|
| statusBar | Boolean | true | 包含状态栏 |
| statusBarFontColor | Array,String | #000000 | 状态栏字体颜色,只支持```#000000 ```和```#FFFFFF```(如果需要屏幕滑动变色,参数则为数组,例子:```['#000000','#ffffff']```)|
| statusBarBackground | Array,String | null | 状态栏背景色,(如果需要屏幕滑动变色,参数则为数组,例子:```['#24bdab','#80c54c']```)|
``` javascript
// statusBarBackground 多种用法
// 普通用法
statusBarBackground: '#80c54c',
// 滑动后由透明转为有颜色 '#80c54c'
statusBarBackground: ['', '#80c54c'],
// 滑动变色,一种颜色变另一种颜色
statusBarBackground: ['#24bdab','#80c54c'],
```
### 插槽属性
> 可下载项目示例查看
| 名称 | 类型 | 默认值 | 描述 |
| -------------------|-----------| -----------| ---------------------------------------------------|
| leftSlot | bool | false | 左插槽 |
| leftSlotSwitch | bool | false | 左滑动切换插槽 |
| centerSlot | bool | false | 中间插槽(注:设置后标题`title`属性失效) |
| centerSlotSwitch | bool | false | 中间滑动切换插槽 |
| rightSlot | bool | false | 右插槽 |
| rightSlotSwitch | bool | false | 右滑动切换插槽 |
| maxSlot | bool | false | 填充满导航栏的插槽,使用该插槽就不要用其他插槽 (我认为是个无意义的插槽)|
| maxSlotSwitch | bool | false | 填充满导航栏的滑动切换插槽 |
### leftButton 和 rightButton 属性
| 名称 | 类型 | 默认值 | 描述 |
| -------------|--------------- | ---------------------- | ---------------------------------------------------|
| key | num,string | null | 唯一标识,按钮点击事件会用到 |
| icon | String | null | 字体图标,如果使用自己的请先设置 `font` 属性 |
| txt | String | null | 图标旁的文字,一般地址功能和城市功能才用到 |
| color | String | 随导航栏字体颜色 | icon 图标的颜色,一般动态设置如收藏功能 |
| position | left, right | right | 图标居于文字的 left 或 right |
| @clickBtn | 按钮点击事件 | 返回被点击对象 | 按钮点击事件,可根据key来识别,进行操作 |
可以设置多个按钮,建议每边不超过3个按钮,带文字的不超过2个按钮,也就是两边总共不超过6个按钮
``` html
```
``` javascript
export default {
data() {
return {
config:{
title: '这里是新疆',
color: '#ffffff',
//背景颜色;参数一:透明度(0-1);参数二:背景颜色(array则为线性渐变,string为单色背景)
backgroundColor: [1,['#a9a1ff','#6970ff','#ff55ff','#ff9999']],
// 滑动屏幕后切换颜色,注意颜色为数组时长度必须一样,还有使用滑动切换必须监听 onPageScroll 事件
slideBackgroundColor: [0,['#a9a1ff','#6970ff','#ff55ff','#ff9999']],
// 状态栏 ,数组则为滑动变色
statusBarBackground:['','#ffffff'],
rightButton:[{
key: 'btn1',
icon: '',
position: 'left'
},{
key: 'btn2',
icon: '',
position: 'left'
},{
key: 'btn3',
icon: '',
position: 'left'
}],
},
}
},
onPageScroll(e) {
// 重点,用到滑动切换必须加上
this.$refs.hxnb.pageScroll(e);
},
methods: {
onClickBtn(data){
//console.log(data);
uni.showToast({
title: `key为 ${data.key} 的按钮`,
icon:'none',
duration: 1300
});
},
}
}
```
### search 属性
设置后 title 将失效
| 名称 | 类型 | 默认值 | 描述 |
| -------------|--------------- | ---------------------- | ---------------------------------------------------|
| value | string | null | 搜索框默认值 |
| placeholder | String | 请输入搜索内容 | 搜索框提示信息 |
| disabled | bool | false 没禁止 | 是否禁止输入, 一般会禁止输入然后跳转到指定的搜索页|
| @searchClick | 输入框点击事件 | | 当点击了搜索框时触发,这时候可以进行操作,如跳转到指定的搜索页 |
| @searchConfirm | 输入后点完成的事件 | {value: txt} | 当点击了完成或回车则会触发,返回输入的内容 |
可以设置多个按钮,建议每边不超过3个按钮,带文字的不超过2个按钮,也就是两边总共不超过6个按钮
``` html
```
``` javascript
export default {
data() {
return {
config:{
back: false,
title: '这里是新疆',
color: '#ffffff',
search: {
value:'',
placeholder: '',
disabled: false
},
leftButton:[{
key: 'btn1',
icon: '',
txt: '新疆',
position: 'left'
}],
},
}
},
methods: {
// 当输入完点击完成时触发
searchConfirm(data){
//console.log(data.value);
uni.showToast({
title: `输入了${data.value}`,
icon:'none',
duration: 1300
});
},
// 当点击了搜索框时触发
searchClick(data){
uni.showToast({
title: `点击了搜索框`,
icon:'none',
duration: 1300
});
},
}
}
```
## 一些简单使用例子
### 简单使用
``` html
```
### 背景颜色线性渐变、头部固定
``` html
```
``` javascript
export default {
data() {
return {
config:{
title: '这里是新疆',
color: '#ffffff',
//背景颜色;参数一:透明度(0-1);参数二:背景颜色(array则为线性渐变,string为单色背景)
backgroundColor: [1,['#a9a1ff','#6970ff','#ff55ff','#ff9999']],
}
}
}
}
```
### 滑动切换背景
``` html
```
``` javascript
export default {
data() {
return {
config:{
title: '这里是新疆',
color: '#ffffff',
//背景颜色;参数一:透明度(0-1);参数二:背景颜色(array则为线性渐变,string为单色背景)
backgroundColor: [1,['#a9a1ff','#6970ff','#ff55ff','#ff9999']],
// 滑动屏幕后切换颜色,注意颜色为数组时长度必须一样,还有使用滑动切换必须监听 onPageScroll 事件
slideBackgroundColor: [1,['#24bdab','#24bdab','#80c54c','#80c54c']],
},
}
},
onPageScroll(e) {
// 重点,用到滑动切换必须加上
this.$refs.hxnb.pageScroll(e);
}
}
```
### 滑动隐藏背景
``` html
```
``` javascript
export default {
data() {
return {
config:{
title: '这里是新疆',
color: '#ffffff',
//背景颜色;参数一:透明度(0-1);参数二:背景颜色(array则为线性渐变,string为单色背景)
backgroundColor: [1,['#a9a1ff','#6970ff','#ff55ff','#ff9999']],
// 滑动屏幕后切换颜色,注意颜色为数组时长度必须一样,还有使用滑动切换必须监听 onPageScroll 事件
slideBackgroundColor: [0,['#a9a1ff','#6970ff','#ff55ff','#ff9999']],
},
}
},
onPageScroll(e) {
// 重点,用到滑动切换必须加上
this.$refs.hxnb.pageScroll(e);
}
}
```
### 设置背景图
``` html
```
``` javascript
export default {
data() {
return {
config:{
title: '这里是新疆',
color: '#ffffff',
// 背景图片(array则为滑动切换背景图,string为单一背景图)
// backgroundImg: ['/static/xj.jpg','/static/logo.png'],
backgroundImg: '/static/xj.jpg',
},
}
}
}
```
### 滑动切换背景图
``` html
```
``` javascript
export default {
data() {
return {
config:{
title: '这里是新疆',
color: '#ffffff',
// 背景图片(array则为滑动切换背景图,string为单一背景图)
backgroundImg: ['/static/xj.jpg','/static/xk.jpg',1,0.4],
},
}
},
onPageScroll(e) {
// 重点,用到滑动切换必须加上
this.$refs.hxnb.pageScroll(e);
}
}
```