186 lines
5.8 KiB
Markdown
186 lines
5.8 KiB
Markdown
# 数字分割显示功能说明
|
||
|
||
## 功能概述
|
||
实现了将数字(如23897)分割成单个数字并分别显示在容器中的功能。每个数字都有独立的样式容器,可以单独设置样式。**新增了丰富的动画效果,让数字动起来!**
|
||
|
||
## 实现原理
|
||
使用Vue 3的`computed`计算属性,将数字转换为字符串后分割成数组,然后通过`v-for`循环渲染每个数字。
|
||
|
||
## 主要特性
|
||
|
||
### 1. 总计数量显示
|
||
- 初始值:23897
|
||
- 显示效果:每个数字独立显示在紫色背景的容器中
|
||
- 动态更新:支持通过API调用更新数据
|
||
- **动画效果**:数字滚动动画、发光效果、悬停缩放
|
||
|
||
### 2. 员工类型数量显示
|
||
- 正式员工:123人
|
||
- 外协人员:45人
|
||
- 访客:678人
|
||
- 每个数字类型都有独立的计算属性和更新方法
|
||
- **动画效果**:脉冲动画、悬停效果、颜色变化
|
||
|
||
### 3. 响应式更新
|
||
- 所有数字都支持动态更新
|
||
- 数字变化时,显示会自动重新计算和渲染
|
||
- **动画效果**:平滑的数字滚动、更新完成后的闪烁提示
|
||
|
||
### 4. 🎬 新增动画功能
|
||
- **数字滚动动画**:数字从当前值平滑滚动到目标值
|
||
- **缓动效果**:使用缓动函数让动画更自然流畅
|
||
- **视觉反馈**:数字更新完成后的闪烁效果
|
||
- **悬停交互**:鼠标悬停时的缩放和发光效果
|
||
- **周期性更新**:可设置定时自动更新数据
|
||
|
||
## 代码结构
|
||
|
||
### 响应式数据
|
||
```typescript
|
||
const totalCount = ref<number>(23897)
|
||
const formalEmployeeCount = ref<number>(123)
|
||
const externalStaffCount = ref<number>(45)
|
||
const visitorCount = ref<number>(678)
|
||
|
||
// 动画相关的状态
|
||
const isAnimating = ref<boolean>(false)
|
||
const animationDuration = 2000 // 动画持续时间(毫秒)
|
||
```
|
||
|
||
### 计算属性
|
||
```typescript
|
||
const totalCountDigits = computed(() => {
|
||
return String(totalCount.value).split('').map(Number)
|
||
})
|
||
```
|
||
|
||
### 动画方法
|
||
```typescript
|
||
// 数字滚动动画方法
|
||
const animateNumber = (startValue: number, endValue: number, duration: number, callback: (value: number) => void)
|
||
|
||
// 批量更新所有数字的方法
|
||
const updateAllCounts = (counts: { total?: number, formal?: number, external?: number, visitor?: number })
|
||
|
||
// 测试动画方法
|
||
const testAnimation = () => { /* 生成随机数据并触发动画 */ }
|
||
|
||
// 重置到原始数据
|
||
const resetToOriginal = () => { /* 重置所有数据到初始值 */ }
|
||
```
|
||
|
||
## 使用方法
|
||
|
||
### 1. 更新总计数量
|
||
```typescript
|
||
updateTotalCount(25678) // 会显示为 2 5 6 7 8,带动画效果
|
||
```
|
||
|
||
### 2. 更新员工数量
|
||
```typescript
|
||
updateFormalEmployeeCount(156) // 正式员工:1 5 6
|
||
updateExternalStaffCount(52) // 外协人员:5 2
|
||
updateVisitorCount(789) // 访客:7 8 9
|
||
```
|
||
|
||
### 3. 批量更新所有数据
|
||
```typescript
|
||
updateAllCounts({
|
||
total: 25678,
|
||
formal: 156,
|
||
external: 52,
|
||
visitor: 789
|
||
})
|
||
```
|
||
|
||
### 4. 从API获取数据
|
||
```typescript
|
||
// 示例:从API获取数据后更新显示
|
||
const fetchData = async () => {
|
||
const response = await api.getEmployeeCount()
|
||
updateAllCounts({
|
||
total: response.totalCount,
|
||
formal: response.formalCount,
|
||
external: response.externalCount,
|
||
visitor: response.visitorCount
|
||
})
|
||
}
|
||
```
|
||
|
||
### 5. 测试动画效果
|
||
- 点击"测试动画"按钮:生成随机数据并触发动画
|
||
- 点击"重置数据"按钮:恢复到初始数据
|
||
- 动画进行中按钮会被禁用,防止重复触发
|
||
|
||
## 样式说明
|
||
|
||
### 总计数量样式
|
||
- 容器类:`.number-wrapper`
|
||
- 数字样式:`.total-number`
|
||
- 背景色:紫色 (rgb(177 74 201 / 100%))
|
||
- 尺寸:26px × 50px
|
||
- **动画效果**:
|
||
- 持续发光效果 (`numberGlow`)
|
||
- 悬停缩放 (1.1倍)
|
||
- 更新完成闪烁效果 (`flashEffect`)
|
||
|
||
### 员工类型数字样式
|
||
- 容器类:`.type-number-wrapper`
|
||
- 数字样式:`.type-number`
|
||
- 背景色:绿色 (#1afb8f)
|
||
- 尺寸:14px × 25px
|
||
- **动画效果**:
|
||
- 脉冲动画 (`typeNumberPulse`)
|
||
- 悬停缩放 (1.2倍) 和颜色变化
|
||
- 更新完成闪烁效果 (`typeFlashEffect`)
|
||
|
||
### 测试按钮样式
|
||
- 渐变背景:蓝紫色渐变
|
||
- 悬停效果:上移和阴影增强
|
||
- 禁用状态:半透明和禁用光标
|
||
|
||
## 动画特性详解
|
||
|
||
### 1. 数字滚动动画
|
||
- **持续时间**:2秒(可配置)
|
||
- **缓动函数**:easeOutQuart,让动画更自然
|
||
- **性能优化**:使用requestAnimationFrame确保流畅
|
||
|
||
### 2. 视觉反馈动画
|
||
- **发光效果**:数字容器持续发光,吸引注意力
|
||
- **悬停交互**:鼠标悬停时的缩放和阴影变化
|
||
- **闪烁提示**:数据更新完成后的白色闪烁效果
|
||
|
||
### 3. 动画状态管理
|
||
- **防重复触发**:动画进行中禁止新的动画
|
||
- **批量更新**:支持同时更新多个数字
|
||
- **完成回调**:动画完成后的闪烁效果
|
||
|
||
## 注意事项
|
||
|
||
1. **数字长度自适应**:容器会根据数字的位数自动调整显示
|
||
2. **性能优化**:使用计算属性确保只在数据变化时重新计算
|
||
3. **类型安全**:使用TypeScript确保数据类型安全
|
||
4. **响应式设计**:支持不同屏幕尺寸的适配
|
||
5. **动画性能**:使用CSS动画和requestAnimationFrame确保流畅
|
||
6. **防抖处理**:动画进行中防止重复触发
|
||
|
||
## 扩展功能
|
||
|
||
可以基于此功能扩展:
|
||
- **更多动画类型**:弹跳、旋转、淡入淡出等
|
||
- **数据可视化**:图表动画、进度条动画
|
||
- **交互增强**:拖拽、点击、手势等
|
||
- **主题切换**:不同主题下的动画效果
|
||
- **性能监控**:动画性能统计和优化建议
|
||
- **无障碍支持**:动画开关、减少动画等辅助功能
|
||
|
||
## 演示效果
|
||
|
||
- **页面加载**:5秒后自动更新到新数据
|
||
- **周期性更新**:每15秒自动生成随机数据并触发动画
|
||
- **手动测试**:点击测试按钮立即体验动画效果
|
||
- **数据重置**:一键恢复到初始状态
|
||
|
||
现在你的数字不仅能够分割显示,还能生动地动起来!🎉
|