# 心动等级头像组件 (CrushLevelAvatar) ## 概述 `CrushLevelAvatar` 是一个展示用户与AI角色心动等级的头像组件,根据设计稿实现了双头像重叠布局、心动等级徽章显示以及动画效果。 ## 功能特性 ### 1. 状态处理 - **无等级状态**:只显示AI头像和昵称 - **有等级状态**:显示AI和用户双头像,包含心动等级信息 ### 2. 视觉设计 - **双头像布局**:AI头像和用户头像并排显示,带有白色边框和阴影 - **多层背景装饰**:三层渐变圆形背景,从外到内颜色递进 - **心动等级徽章**:居中显示的心形徽章,包含等级数字 - **角色信息展示**:角色名称和心动温度标签 ### 3. 动画效果 - **等级变化动画**:心形背景从大到小消失,数字等级渐变切换 - **分层延迟**:三层心形背景依次消失(0ms, 100ms, 200ms延迟) - **数字切换**:背景完全消失后,等级数字淡出淡入切换到新等级 ## 组件属性 ```typescript interface CrushLevelAvatarProps { size?: "large" | "small"; // 头像尺寸 showAnimation?: boolean; // 是否显示等级变化动画 } ``` ## 使用示例 ```tsx import CrushLevelAvatar from './components/CrushLevelAvatar'; // 基础使用 // 大尺寸带动画 ``` ## 依赖要求 组件需要在以下上下文中使用: 1. **ChatConfigContext** - 提供AI信息和ID 2. **用户认证** - 获取当前用户信息 3. **IM服务** - 获取心动等级数据 ## 数据来源 - `useChatConfig()` - AI信息和聊天配置 - `useCurrentUser()` - 当前用户信息 - `useGetHeartbeatLevel()` - 心动等级数据 - `useHeartLevelTextFromLevel()` - 等级文本转换 ## 样式系统 ### CSS 动画类 - `.animate-scale-down` - 缩放动画 - `.animate-delay-100/200/300` - 动画延迟 ### 颜色设计 - 外层背景:`from-purple-500/20` - 中层背景:`from-pink-500/30` - 内层背景:`from-magenta-500/40` - 心形徽章:`from-pink-400 to-red-500` ## 实现细节 ### 背景装饰层 ```tsx {/* 心形背景层 - 使用SVG图标 */}
heart background
``` ### 心动等级徽章 ```tsx {/* 心形背景 + 等级数字 */}
heart
{displayLevel?.replace('LEVEL_', '') || '1'}
``` ### 动画触发机制 ```tsx // 监听等级变化触发动画 useEffect(() => { if (showAnimation && heartbeatLevel && heartbeatLevel !== displayLevel) { setIsLevelChanging(true); setAnimationKey(prev => prev + 1); // 背景消失后更新等级数字 setTimeout(() => { setDisplayLevel(heartbeatLevel); setIsLevelChanging(false); }, 600); // 背景消失动画时长 } }, [heartbeatLevel, showAnimation, displayLevel]); ``` ### CSS 动画定义 ```css /* 心形背景消失动画 */ @keyframes scale-fade-out { 0% { transform: scale(1); opacity: 1; } 100% { transform: scale(0.3); opacity: 0; } } /* 等级数字变化动画 */ @keyframes level-change { 0% { opacity: 1; transform: scale(1); } 50% { opacity: 0; transform: scale(0.8); } 100% { opacity: 1; transform: scale(1); } } ``` ## 注意事项 1. **上下文依赖**:组件必须在正确的 Context 环境中使用 2. **性能考虑**:动画效果会增加渲染开销 3. **响应式设计**:组件在不同屏幕尺寸下的表现 4. **数据安全**:处理用户头像加载失败的情况 5. **图标依赖**:需要确保 `/icons/crushlevel_heart.svg` 文件存在 ## 测试 可以通过访问 `/test-crush-level-avatar` 页面查看组件的不同状态和配置效果。 ### 调试功能 在浏览器控制台中可以调用以下函数来手动触发动画: ```javascript window.triggerLevelAnimation(); // 触发等级变化动画 ``` ## 更新历史 - 2024-01-XX:初始实现,包含基础功能 - 2024-01-XX:添加动画效果和背景装饰 - 2024-01-XX:优化性能和用户体验