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秒自动生成随机数据并触发动画
 | ||
| - **手动测试**:点击测试按钮立即体验动画效果
 | ||
| - **数据重置**:一键恢复到初始状态
 | ||
| 
 | ||
| 现在你的数字不仅能够分割显示,还能生动地动起来!🎉
 |