Files
ks-app-employment-service/docs/首页滚动优化说明.md
2025-10-20 16:15:29 +08:00

88 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 首页滚动显示隐藏优化说明
## 修复的问题
### 1. **逻辑冲突问题**
- **原问题**:同时存在触摸手势(`handleTouchStart/Move/End`)和滚动事件两套控制逻辑
- **影响**:两套逻辑相互干扰,导致显示隐藏行为不稳定
- **解决方案**:移除触摸手势处理,统一使用滚动事件控制
### 2. **小程序兼容性问题**
- **原问题**:使用了 `document.querySelector('.falls-scroll')` 操作 DOM
- **影响**:在微信小程序中无法正常工作
- **解决方案**:完全通过响应式数据和滚动事件处理,避免直接操作 DOM
### 3. **不合理的显示逻辑**
- **原问题**:使用 `isManuallyHidden` 标记,只有手动隐藏后才能通过滚动显示
- **影响**:用户体验差,需要特定操作才能恢复显示
- **解决方案**:简化逻辑,滚动到顶部自动显示,向下滚动超过阈值自动隐藏
### 4. **性能问题**
- **原问题**:使用 `setTimeout` 进行节流,清理不完善
- **影响**:可能导致内存泄漏和性能下降
- **解决方案**:改用 `requestAnimationFrame`,添加 `ticking` 标志,在组件卸载时清理
## 优化内容
### 1. **滚动阈值优化**
```javascript
const HIDE_THRESHOLD = 150; // 隐藏顶部区域的滚动阈值
const SHOW_THRESHOLD = 10; // 显示顶部区域的滚动阈值(接近顶部)
const STICKY_THRESHOLD = 100; // 筛选区域吸顶的滚动阈值
```
### 2. **滚动方向判断优化**
- 添加最小位移判断2px避免微小抖动导致的误判
- 使用 `delta` 计算滚动方向,更加准确
### 3. **动画效果优化**
- 使用 Material Design 的缓动曲线 `cubic-bezier(0.4, 0.0, 0.2, 1)`
- 优化过渡时间,使动画更加流畅自然
- 添加 `pointer-events: none` 避免隐藏时的交互问题
- 使用硬件加速(`transform: translateZ(0)`)提升性能
### 4. **吸顶效果优化**
- 优化占位符高度,避免内容跳动
- 改进阴影效果,视觉层次更加清晰
- H5 和小程序分别处理,确保跨平台一致性
### 5. **资源清理**
-`onUnmounted` 生命周期中清理 `requestAnimationFrame`
- 防止内存泄漏
## 使用效果
### 滚动行为
1. **向下滚动超过 150px**:顶部区域(搜索框、卡片、服务网格)自动隐藏
2. **滚动到顶部(小于 10px**:顶部区域自动显示
3. **滚动超过 100px**:筛选区域吸顶显示
### 动画效果
- 隐藏/显示过渡时间350ms
- 透明度过渡300ms
- 平滑的向上滑动动画
### 性能表现
- 使用 `requestAnimationFrame` 确保 60fps 流畅度
- 防抖处理避免过度渲染
- 硬件加速提升动画性能
## 兼容性
- ✅ 微信小程序
- ✅ H5
- ✅ App (理论支持,需实际测试)
## 注意事项
1. 如需调整滚动阈值,修改 `HIDE_THRESHOLD``SHOW_THRESHOLD``STICKY_THRESHOLD` 三个常量
2. 如需调整动画速度,修改 `.hidden-animation` 中的 `transition` 时间
3. 占位符高度需要与 `.nav-filter` 的实际高度保持一致
## 后续优化建议
1. 可以考虑添加滚动速度检测,快速滚动时立即隐藏
2. 可以添加用户偏好设置,允许关闭自动隐藏功能
3. 可以添加触底提示,优化加载更多的体验