171 lines
3.7 KiB
Markdown
171 lines
3.7 KiB
Markdown
# Custom Navbar 组件使用说明
|
||
|
||
## 功能特性
|
||
|
||
- 自动监听页面滚动
|
||
- 滚动时导航栏变为纯色背景
|
||
- 回到顶部时导航栏变为透明
|
||
- 支持自定义背景色和滚动阈值
|
||
- 提供滚动状态事件回调
|
||
|
||
## 基本用法
|
||
|
||
```vue
|
||
<template>
|
||
<view>
|
||
<custom-navbar title="页面标题" />
|
||
<!-- 页面内容 -->
|
||
</view>
|
||
</template>
|
||
```
|
||
|
||
## 高级用法
|
||
|
||
```vue
|
||
<template>
|
||
<view>
|
||
<custom-navbar
|
||
title="古刹巡礼"
|
||
:backgroundColor="'#FAF8F3'"
|
||
:scrollThreshold="100"
|
||
:enableScrollEffect="true"
|
||
@scroll-change="onScrollChange"
|
||
@scroll="onScroll"
|
||
>
|
||
<template #right>
|
||
<view class="right-button">更多</view>
|
||
</template>
|
||
</custom-navbar>
|
||
|
||
<!-- 页面内容 -->
|
||
</view>
|
||
</template>
|
||
|
||
<script>
|
||
export default {
|
||
methods: {
|
||
onScrollChange(data) {
|
||
console.log('滚动状态变化:', data.isScrolled);
|
||
},
|
||
onScroll(data) {
|
||
console.log('滚动位置:', data.scrollTop);
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
```
|
||
|
||
## Props 参数
|
||
|
||
| 参数 | 类型 | 默认值 | 说明 |
|
||
|------|------|--------|------|
|
||
| title | String | '' | 导航栏标题 |
|
||
| backIcon | String | CommonEnum.BACK_BUTTON | 返回按钮图标 |
|
||
| showBack | Boolean | true | 是否显示返回按钮 |
|
||
| backgroundColor | String | '#ffffff' | 滚动时的背景色 |
|
||
| scrollThreshold | Number | 50 | 滚动阈值(像素) |
|
||
| enableScrollEffect | Boolean | true | 是否启用滚动效果 |
|
||
|
||
## Events 事件
|
||
|
||
| 事件名 | 参数 | 说明 |
|
||
|--------|------|------|
|
||
| back | - | 点击返回按钮时触发 |
|
||
| scroll-change | { isScrolled, scrollTop } | 滚动状态变化时触发 |
|
||
| scroll | { scrollTop, isScrolled } | 页面滚动时触发 |
|
||
|
||
## 方法
|
||
|
||
| 方法名 | 参数 | 说明 |
|
||
|--------|------|------|
|
||
| setScrollState | scrollTop | 手动设置滚动状态 |
|
||
|
||
## 样式定制
|
||
|
||
组件会自动添加以下 CSS 类:
|
||
|
||
- `.navbar-scrolled`: 滚动状态下的样式
|
||
- 过渡动画:背景色变化有 0.3s 的过渡效果
|
||
- 阴影效果:滚动时自动添加阴影
|
||
|
||
## 注意事项
|
||
|
||
1. **重要**:需要在父页面的 `onPageScroll` 生命周期中调用组件的 `handlePageScroll` 方法
|
||
2. 滚动效果默认启用,可通过 `enableScrollEffect` 关闭
|
||
3. 背景色变化有平滑过渡动画
|
||
4. 组件使用 `ref` 引用,确保在页面中正确引用
|
||
|
||
## 完整使用示例
|
||
|
||
### 方法一:使用 Mixin(推荐)
|
||
|
||
```vue
|
||
<template>
|
||
<view>
|
||
<custom-navbar
|
||
ref="customNavbar"
|
||
title="页面标题"
|
||
backgroundColor="#FAF8F3"
|
||
:scrollThreshold="50"
|
||
@scroll-change="onScrollChange"
|
||
/>
|
||
<!-- 页面内容 -->
|
||
</view>
|
||
</template>
|
||
|
||
<script>
|
||
import CustomNavbar from "@/components/custom-navbar/custom-navbar.vue";
|
||
import PageScrollMixin from "@/mixins/page-scroll-mixin.js";
|
||
|
||
export default {
|
||
mixins: [PageScrollMixin], // 自动处理滚动事件
|
||
components: {
|
||
CustomNavbar
|
||
},
|
||
methods: {
|
||
onScrollChange(data) {
|
||
console.log('滚动状态变化:', data.isScrolled);
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
```
|
||
|
||
### 方法二:手动处理
|
||
|
||
```vue
|
||
<template>
|
||
<view>
|
||
<custom-navbar
|
||
ref="customNavbar"
|
||
title="页面标题"
|
||
backgroundColor="#FAF8F3"
|
||
:scrollThreshold="50"
|
||
@scroll-change="onScrollChange"
|
||
/>
|
||
<!-- 页面内容 -->
|
||
</view>
|
||
</template>
|
||
|
||
<script>
|
||
import CustomNavbar from "@/components/custom-navbar/custom-navbar.vue";
|
||
|
||
export default {
|
||
components: {
|
||
CustomNavbar
|
||
},
|
||
// 页面生命周期 - 必须添加
|
||
onPageScroll(e) {
|
||
// 将页面滚动事件传递给导航栏组件
|
||
if (this.$refs.customNavbar) {
|
||
this.$refs.customNavbar.handlePageScroll(e);
|
||
}
|
||
},
|
||
methods: {
|
||
onScrollChange(data) {
|
||
console.log('滚动状态变化:', data.isScrolled);
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
``` |