爱心跳动代码优化:从基础实现到性能与体验提升
代码分析 这段代码实现了一个爱心跳动的动画效果,并且在爱心中间显示文字,文字颜色会发生变化,同时还添加了点击爱心加速跳动的交互效果。代码整体结构清晰,不过有一些可以优化的地方。 优化建议 1. 减少代码重复:在 `@keyframes beat` 中,`transform` 属性都包含 `rotate(45deg)`,可以将其提取到 `.heart-container` 的基础样式中,减少重复代码。 2. 提高代码可读性:可以将一些样式值提取为变量,方便修改和维护。 3. 添加浏览器前缀:为了保证动画在不同浏览器中的兼容性,需要添加浏览器前缀。 优化后的代码 ```html <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>爱心跳动</title> <style> /* 定义一些常量 */ :root { --heart-color: #ff4d4d; --text-color-1: #ffffff; --text-color-2: #ffd700; --beat-duration: 1.5s; --beat-duration-fast: 1s; --beat-scale: 1.2; --heart-width: 100px; --heart-height: 150px; } body { display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; background-color: #f0f0f0; } .heart-container { position: relative; transform: rotate(45deg); /* 提取基础旋转样式 */ animation: beat var(--beat-duration) infinite; -webkit-animation: beat var(--beat-duration) infinite; /* 添加浏览器前缀 */ } .heart-container:before, .heart-container:after { content: ""; position: absolute; width: var(--heart-width); height: var(--heart-height); background-color: var(--heart-color); border-radius: 100px 100px 0 0; } .heart-container:before { left: -50px; transform: rotate(-45deg); transform-origin: 100% 100%; } .heart-container:after { top: -50px; transform: rotate(45deg); transform-origin: 0 100%; } .text { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); color: var(--text-color-1); font-family: "Microsoft YaHei", sans-serif; font-size: 24px; font-weight: bold; text-align: center; line-height: 1.2; z-index: 1; animation: colorChange 3s infinite; -webkit-animation: colorChange 3s infinite; /* 添加浏览器前缀 */ } @keyframes beat { 0%, 100% { transform: scale(1); } 10%, 30%, 50%, 70%, 90% { transform: scale(var(--beat-scale)); } } @-webkit-keyframes beat { 0%, 100% { -webkit-transform: scale(1); } 10%, 30%, 50%, 70%, 90% { -webkit-transform: scale(var(--beat-scale)); } } @keyframes colorChange { 0% { color: var(--text-color-1); } 50% { color: var(--text-color-2); } 100% { color: var(--text-color-1); } } @-webkit-keyframes colorChange { 0% { color: var(--text-color-1); } 50% { color: var(--text-color-2); } 100% { color: var(--text-color-1); } } </style> </head> <body> <div class="heart-container"> <div class="text">何铮<br>我们爱你</div> </div> <script> // 可以在这里添加更多交互效果 document.addEventListener('click', function() { const heart = document.querySelector('.heart-container'); heart.style.animationDuration = '1s'; setTimeout(() => { heart.style.animationDuration = '1.5s'; }, 300); }); </script> </body> </html> ``` 额外注意的逻辑点 1. 浏览器兼容性:虽然添加了 `-webkit-` 前缀,但不同浏览器对动画的支持可能还是存在差异,需要在多种浏览器中进行测试。 2. 动画性能:过多的动画可能会影响页面性能,尤其是在移动设备上。可以考虑减少不必要的动画或者使用硬件加速(如 `transform: translateZ(0)`)来提高性能。 3. 用户交互体验:点击爱心加速跳动的效果可以进一步优化,例如添加音效或者其他视觉反馈,提升用户体验。 ######[AI写代码神器 | 1313点数解答 | 2025-06-11 21:06:30]
- Even More Odd Photos:求解 Farmer John 奶牛分组最大组数的算法解析(字节豆包 | 841点数解答 | 2026-02-03 15:18:32)46
- 基础倒水问题:n 个杯子 k 次倒水后水量全揭秘!(字节豆包 | 160点数解答 | 2026-02-04 21:37:25)45
- “龙虎斗”游戏难题破解:Python代码实现最小气势差距兵营选择(字节豆包 | 709点数解答 | 2026-02-05 17:06:22)49
- C++ 实现打印放大的 'X' 问题解答(字节豆包 | 359点数解答 | 2026-04-02 14:37:18)43
- 【基础】数值计算的 C++ 实现(字节豆包 | 359点数解答 | 2026-04-12 13:41:24)19
- 基础数值计算:C++实现数字位数、逐位输出及逆序输出(字节豆包 | 395点数解答 | 2026-04-12 13:41:46)18
- C++实现区间1到n中数字x出现次数的统计(字节豆包 | 438点数解答 | 2026-04-12 13:46:48)13
- 用 C++ 计算 1 到 n 之间回文数的个数(字节豆包 | 468点数解答 | 2026-04-12 16:10:36)13
- 计算1到N之间同构数个数的C++代码实现(字节豆包 | 221点数解答 | 2026-04-19 13:17:59)10
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)365
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)335
- 解析React 15与Vue 2:从O(n^3)到O(n),Diff算法时间复杂度计算及性能对比 (阿里通义 | 379点数解答 | 2023-11-09 01:49:19)347