roadmap.html 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780
  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>产品路线图 - 映三色项目报告</title>
  7. <link href="https://cdn.bootcdn.net/ajax/libs/bootstrap/5.3.0/css/bootstrap.min.css" rel="stylesheet">
  8. <link href="https://cdn.bootcdn.net/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet">
  9. <link href="https://cdn.bootcdn.net/ajax/libs/animate.css/4.1.1/animate.min.css" rel="stylesheet">
  10. <style>
  11. :root {
  12. --primary-color: #00d4ff;
  13. --secondary-color: #0099cc;
  14. --dark-bg: #0a0a0a;
  15. --card-bg: #1a1a1a;
  16. --text-primary: #ffffff;
  17. --text-secondary: #cccccc;
  18. --success-color: #28a745;
  19. --warning-color: #ffc107;
  20. --danger-color: #dc3545;
  21. --info-color: #17a2b8;
  22. }
  23. body {
  24. background: var(--dark-bg);
  25. color: var(--text-primary);
  26. font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
  27. }
  28. .header {
  29. background: linear-gradient(135deg, #1a1a1a 0%, #2a2a2a 100%);
  30. padding: 20px 0;
  31. border-bottom: 2px solid var(--primary-color);
  32. }
  33. .roadmap-container {
  34. max-width: 1400px;
  35. margin: 0 auto;
  36. padding: 40px 20px;
  37. }
  38. .timeline-roadmap {
  39. position: relative;
  40. margin: 40px 0;
  41. }
  42. .timeline-roadmap::before {
  43. content: '';
  44. position: absolute;
  45. left: 50%;
  46. top: 0;
  47. bottom: 0;
  48. width: 4px;
  49. background: linear-gradient(to bottom, var(--primary-color), var(--secondary-color), var(--success-color));
  50. transform: translateX(-50%);
  51. }
  52. .phase-item {
  53. position: relative;
  54. margin: 60px 0;
  55. opacity: 0;
  56. animation: fadeInUp 0.8s ease forwards;
  57. }
  58. .phase-item:nth-child(odd) {
  59. text-align: right;
  60. padding-right: calc(50% + 40px);
  61. }
  62. .phase-item:nth-child(even) {
  63. text-align: left;
  64. padding-left: calc(50% + 40px);
  65. }
  66. .phase-node {
  67. position: absolute;
  68. left: 50%;
  69. top: 30px;
  70. width: 80px;
  71. height: 80px;
  72. background: var(--primary-color);
  73. border-radius: 50%;
  74. transform: translateX(-50%);
  75. display: flex;
  76. align-items: center;
  77. justify-content: center;
  78. font-size: 2rem;
  79. color: white;
  80. z-index: 2;
  81. box-shadow: 0 0 30px rgba(0, 212, 255, 0.6);
  82. border: 4px solid var(--dark-bg);
  83. }
  84. .phase-content {
  85. background: rgba(26, 26, 26, 0.9);
  86. border-radius: 20px;
  87. padding: 30px;
  88. position: relative;
  89. border: 1px solid rgba(0, 212, 255, 0.3);
  90. transition: all 0.3s ease;
  91. }
  92. .phase-content:hover {
  93. transform: translateY(-10px);
  94. box-shadow: 0 20px 40px rgba(0, 212, 255, 0.2);
  95. border-color: var(--primary-color);
  96. }
  97. .phase-item:nth-child(odd) .phase-content::after {
  98. content: '';
  99. position: absolute;
  100. right: -20px;
  101. top: 35px;
  102. width: 0;
  103. height: 0;
  104. border: 20px solid transparent;
  105. border-left-color: rgba(26, 26, 26, 0.9);
  106. }
  107. .phase-item:nth-child(even) .phase-content::after {
  108. content: '';
  109. position: absolute;
  110. left: -20px;
  111. top: 35px;
  112. width: 0;
  113. height: 0;
  114. border: 20px solid transparent;
  115. border-right-color: rgba(26, 26, 26, 0.9);
  116. }
  117. .phase-title {
  118. font-size: 1.8rem;
  119. font-weight: bold;
  120. color: var(--primary-color);
  121. margin-bottom: 10px;
  122. display: flex;
  123. align-items: center;
  124. }
  125. .phase-duration {
  126. background: var(--info-color);
  127. color: white;
  128. padding: 5px 15px;
  129. border-radius: 20px;
  130. font-size: 0.9rem;
  131. margin-left: 15px;
  132. }
  133. .phase-description {
  134. color: var(--text-secondary);
  135. margin-bottom: 20px;
  136. line-height: 1.6;
  137. }
  138. .features-grid {
  139. display: grid;
  140. grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  141. gap: 15px;
  142. }
  143. .feature-item {
  144. background: rgba(0, 212, 255, 0.1);
  145. border-radius: 8px;
  146. padding: 15px;
  147. border-left: 4px solid var(--primary-color);
  148. transition: all 0.3s ease;
  149. }
  150. .feature-item:hover {
  151. background: rgba(0, 212, 255, 0.2);
  152. transform: translateX(5px);
  153. }
  154. .feature-title {
  155. font-weight: bold;
  156. color: var(--primary-color);
  157. margin-bottom: 8px;
  158. font-size: 0.95rem;
  159. }
  160. .feature-desc {
  161. color: var(--text-secondary);
  162. font-size: 0.85rem;
  163. }
  164. .priority-indicators {
  165. display: flex;
  166. gap: 10px;
  167. margin: 15px 0;
  168. flex-wrap: wrap;
  169. }
  170. .priority-badge {
  171. padding: 5px 12px;
  172. border-radius: 15px;
  173. font-size: 0.8rem;
  174. font-weight: bold;
  175. }
  176. .priority-critical {
  177. background: var(--danger-color);
  178. color: white;
  179. }
  180. .priority-high {
  181. background: var(--warning-color);
  182. color: #000;
  183. }
  184. .priority-medium {
  185. background: var(--info-color);
  186. color: white;
  187. }
  188. .priority-low {
  189. background: var(--success-color);
  190. color: white;
  191. }
  192. .resources-needed {
  193. background: rgba(255, 193, 7, 0.1);
  194. border-radius: 10px;
  195. padding: 15px;
  196. margin: 20px 0;
  197. border-left: 4px solid var(--warning-color);
  198. }
  199. .resources-title {
  200. font-weight: bold;
  201. color: var(--warning-color);
  202. margin-bottom: 10px;
  203. }
  204. .resources-list {
  205. list-style: none;
  206. padding: 0;
  207. }
  208. .resources-list li {
  209. padding: 3px 0;
  210. position: relative;
  211. padding-left: 20px;
  212. }
  213. .resources-list li::before {
  214. content: '👥';
  215. position: absolute;
  216. left: 0;
  217. }
  218. .milestone-summary {
  219. background: rgba(26, 26, 26, 0.9);
  220. border-radius: 15px;
  221. padding: 30px;
  222. margin: 40px 0;
  223. border: 1px solid rgba(0, 212, 255, 0.3);
  224. }
  225. .summary-grid {
  226. display: grid;
  227. grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  228. gap: 20px;
  229. }
  230. .summary-item {
  231. text-align: center;
  232. padding: 20px;
  233. background: rgba(0, 212, 255, 0.1);
  234. border-radius: 10px;
  235. }
  236. .summary-number {
  237. font-size: 2.5rem;
  238. font-weight: bold;
  239. color: var(--primary-color);
  240. display: block;
  241. margin-bottom: 10px;
  242. }
  243. .summary-label {
  244. color: var(--text-secondary);
  245. font-size: 0.9rem;
  246. }
  247. .back-btn {
  248. background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  249. border: none;
  250. color: white;
  251. padding: 10px 20px;
  252. border-radius: 25px;
  253. text-decoration: none;
  254. display: inline-flex;
  255. align-items: center;
  256. transition: all 0.3s ease;
  257. }
  258. .back-btn:hover {
  259. transform: translateY(-2px);
  260. box-shadow: 0 5px 15px rgba(102, 126, 234, 0.4);
  261. color: white;
  262. }
  263. @keyframes fadeInUp {
  264. from {
  265. opacity: 0;
  266. transform: translateY(50px);
  267. }
  268. to {
  269. opacity: 1;
  270. transform: translateY(0);
  271. }
  272. }
  273. @media (max-width: 768px) {
  274. .timeline-roadmap::before {
  275. left: 30px;
  276. }
  277. .phase-item {
  278. text-align: left !important;
  279. padding-left: 70px !important;
  280. padding-right: 0 !important;
  281. }
  282. .phase-node {
  283. left: 30px !important;
  284. transform: none !important;
  285. width: 60px;
  286. height: 60px;
  287. font-size: 1.5rem;
  288. }
  289. .phase-content::after {
  290. display: none !important;
  291. }
  292. .phase-title {
  293. font-size: 1.5rem;
  294. flex-direction: column;
  295. align-items: flex-start;
  296. }
  297. .phase-duration {
  298. margin-left: 0;
  299. margin-top: 10px;
  300. }
  301. }
  302. </style>
  303. </head>
  304. <body>
  305. <header class="header">
  306. <div class="container">
  307. <nav class="breadcrumb">
  308. <a class="breadcrumb-item" href="index.html" style="color: var(--primary-color); text-decoration: none;">
  309. <i class="fas fa-home me-2"></i>首页
  310. </a>
  311. <span class="breadcrumb-item active" style="color: var(--text-secondary);">产品路线图</span>
  312. </nav>
  313. <div class="d-flex justify-content-between align-items-center mt-3">
  314. <h1 class="mb-0">
  315. <i class="fas fa-road me-2"></i>产品路线图
  316. </h1>
  317. <a href="index.html" class="back-btn">
  318. <i class="fas fa-arrow-left me-2"></i>返回首页
  319. </a>
  320. </div>
  321. </div>
  322. </header>
  323. <div class="roadmap-container">
  324. <!-- 路线图概述 -->
  325. <div class="milestone-summary animate__animated animate__fadeIn">
  326. <h2 class="text-center mb-4">
  327. <i class="fas fa-map-marked-alt me-2"></i>开发路线图概述
  328. </h2>
  329. <p class="text-center text-secondary mb-4">
  330. 基于会议讨论的功能优先级和开发时间线,制定为期12个月的产品开发计划
  331. </p>
  332. <div class="summary-grid">
  333. <div class="summary-item">
  334. <span class="summary-number">4</span>
  335. <div class="summary-label">开发阶段</div>
  336. </div>
  337. <div class="summary-item">
  338. <span class="summary-number">4</span>
  339. <div class="summary-label">周开发周期</div>
  340. </div>
  341. <div class="summary-item">
  342. <span class="summary-number">25+</span>
  343. <div class="summary-label">核心功能</div>
  344. </div>
  345. <div class="summary-item">
  346. <span class="summary-number">6</span>
  347. <div class="summary-label">业务端口</div>
  348. </div>
  349. </div>
  350. </div>
  351. <!-- 开发时间线 -->
  352. <div class="timeline-roadmap">
  353. <!-- 第一阶段:基础架构与核心功能 -->
  354. <div class="phase-item" style="animation-delay: 0.2s;">
  355. <div class="phase-node">
  356. <i class="fas fa-rocket"></i>
  357. </div>
  358. <div class="phase-content">
  359. <div class="phase-title">
  360. 第一阶段:基础架构与核心功能
  361. <span class="phase-duration">1周</span>
  362. </div>
  363. <div class="phase-description">
  364. 建立系统基础架构,实现各端核心功能,确保基本业务流程的数字化运行。
  365. </div>
  366. <div class="priority-indicators">
  367. <span class="priority-badge priority-critical">关键路径</span>
  368. <span class="priority-badge priority-high">高优先级</span>
  369. </div>
  370. <div class="features-grid">
  371. <div class="feature-item">
  372. <div class="feature-title">客服端基础功能</div>
  373. <div class="feature-desc">工作台、客户咨询、订单分配</div>
  374. </div>
  375. <div class="feature-item">
  376. <div class="feature-title">设计师工作台</div>
  377. <div class="feature-desc">项目列表、代办事项、休息管理</div>
  378. </div>
  379. <div class="feature-item">
  380. <div class="feature-title">组长管理面板</div>
  381. <div class="feature-desc">项目总览、异常监控、人员管理</div>
  382. </div>
  383. <div class="feature-item">
  384. <div class="feature-title">统一项目详情</div>
  385. <div class="feature-desc">全局项目详情页面,支持各端访问</div>
  386. </div>
  387. <div class="feature-item">
  388. <div class="feature-title">企业微信集成</div>
  389. <div class="feature-desc">信息同步,聊天窗口跳转</div>
  390. </div>
  391. <div class="feature-item">
  392. <div class="feature-title">小程序对接</div>
  393. <div class="feature-desc">自动同步项目和客户信息</div>
  394. </div>
  395. </div>
  396. <div class="resources-needed">
  397. <div class="resources-title">
  398. <i class="fas fa-users me-2"></i>所需资源
  399. </div>
  400. <ul class="resources-list">
  401. <li>前端开发工程师 2名</li>
  402. <li>后端开发工程师 2名</li>
  403. <li>UI/UX设计师 1名</li>
  404. <li>项目经理 1名</li>
  405. </ul>
  406. </div>
  407. </div>
  408. </div>
  409. <!-- 第二阶段:流程优化与智能化 -->
  410. <div class="phase-item" style="animation-delay: 0.4s;">
  411. <div class="phase-node">
  412. <i class="fas fa-brain"></i>
  413. </div>
  414. <div class="phase-content">
  415. <div class="phase-title">
  416. 第二阶段:流程优化与智能化
  417. <span class="phase-duration">2周</span>
  418. </div>
  419. <div class="phase-description">
  420. 在基础功能基础上,加入智能化元素,优化用户体验,提升工作效率。
  421. </div>
  422. <div class="priority-indicators">
  423. <span class="priority-badge priority-high">高优先级</span>
  424. <span class="priority-badge priority-medium">智能化</span>
  425. </div>
  426. <div class="features-grid">
  427. <div class="feature-item">
  428. <div class="feature-title">智能提醒系统</div>
  429. <div class="feature-desc">敏感词识别、紧急项目提醒</div>
  430. </div>
  431. <div class="feature-item">
  432. <div class="feature-title">财务管理优化</div>
  433. <div class="feature-desc">自动对账、收入分配、成本统计</div>
  434. </div>
  435. <div class="feature-item">
  436. <div class="feature-title">人事管理系统</div>
  437. <div class="feature-desc">员工档案、考勤统计、绩效评估</div>
  438. </div>
  439. <div class="feature-item">
  440. <div class="feature-title">案例库功能</div>
  441. <div class="feature-desc">案例分享、统计分析、关键词搜索</div>
  442. </div>
  443. <div class="feature-item">
  444. <div class="feature-title">质量管理体系</div>
  445. <div class="feature-desc">SOP数据统计、质量评估工具</div>
  446. </div>
  447. <div class="feature-item">
  448. <div class="feature-title">移动端优化</div>
  449. <div class="feature-desc">响应式设计、移动端操作友好</div>
  450. </div>
  451. </div>
  452. <div class="resources-needed">
  453. <div class="resources-title">
  454. <i class="fas fa-users me-2"></i>所需资源
  455. </div>
  456. <ul class="resources-list">
  457. <li>AI算法工程师 1名</li>
  458. <li>数据分析师 1名</li>
  459. <li>前端开发工程师 1名</li>
  460. <li>测试工程师 1名</li>
  461. </ul>
  462. </div>
  463. </div>
  464. </div>
  465. <!-- 第三阶段:数据驱动与分析 -->
  466. <div class="phase-item" style="animation-delay: 0.6s;">
  467. <div class="phase-node">
  468. <i class="fas fa-chart-line"></i>
  469. </div>
  470. <div class="phase-content">
  471. <div class="phase-title">
  472. 第三阶段:数据驱动与分析
  473. <span class="phase-duration">3周</span>
  474. </div>
  475. <div class="phase-description">
  476. 建立完整的数据分析体系,提供决策支持,实现业务数据化管理。
  477. </div>
  478. <div class="priority-indicators">
  479. <span class="priority-badge priority-medium">中优先级</span>
  480. <span class="priority-badge priority-low">数据分析</span>
  481. </div>
  482. <div class="features-grid">
  483. <div class="feature-item">
  484. <div class="feature-title">综合数据看板</div>
  485. <div class="feature-desc">项目、员工、客户、收入统计</div>
  486. </div>
  487. <div class="feature-item">
  488. <div class="feature-title">效果图评估工具</div>
  489. <div class="feature-desc">AI辅助评估、质量打分系统</div>
  490. </div>
  491. <div class="feature-item">
  492. <div class="feature-title">工作量评估系统</div>
  493. <div class="feature-desc">需求分析、工时预测、资源分配</div>
  494. </div>
  495. <div class="feature-item">
  496. <div class="feature-title">客户行为分析</div>
  497. <div class="feature-desc">访问统计、偏好分析、转化跟踪</div>
  498. </div>
  499. <div class="feature-item">
  500. <div class="feature-title">预测性分析</div>
  501. <div class="feature-desc">项目延期预警、人力需求预测</div>
  502. </div>
  503. <div class="feature-item">
  504. <div class="feature-title">绩效分析系统</div>
  505. <div class="feature-desc">721绩效体系、多维度评估</div>
  506. </div>
  507. </div>
  508. <div class="resources-needed">
  509. <div class="resources-title">
  510. <i class="fas fa-users me-2"></i>所需资源
  511. </div>
  512. <ul class="resources-list">
  513. <li>数据工程师 1名</li>
  514. <li>商业分析师 1名</li>
  515. <li>机器学习工程师 1名</li>
  516. <li>数据可视化设计师 1名</li>
  517. </ul>
  518. </div>
  519. </div>
  520. </div>
  521. <!-- 第四阶段:AI集成与未来规划 -->
  522. <div class="phase-item" style="animation-delay: 0.8s;">
  523. <div class="phase-node">
  524. <i class="fas fa-robot"></i>
  525. </div>
  526. <div class="phase-content">
  527. <div class="phase-title">
  528. 第四阶段:AI集成与未来规划
  529. <span class="phase-duration">4周</span>
  530. </div>
  531. <div class="phase-description">
  532. 集成AI技术,探索未来业务模式,为公司长期发展奠定技术基础。
  533. </div>
  534. <div class="priority-indicators">
  535. <span class="priority-badge priority-medium">中优先级</span>
  536. <span class="priority-badge priority-low">前瞻性</span>
  537. </div>
  538. <div class="features-grid">
  539. <div class="feature-item">
  540. <div class="feature-title">AI辅助建模</div>
  541. <div class="feature-desc">自动建模工具、智能优化建议</div>
  542. </div>
  543. <div class="feature-item">
  544. <div class="feature-title">智能渲染优化</div>
  545. <div class="feature-desc">参数自动调节、质量智能评估</div>
  546. </div>
  547. <div class="feature-item">
  548. <div class="feature-title">客服AI助手</div>
  549. <div class="feature-desc">智能回复、需求理解、方案推荐</div>
  550. </div>
  551. <div class="feature-item">
  552. <div class="feature-title">项目智能调度</div>
  553. <div class="feature-desc">资源优化分配、时间智能规划</div>
  554. </div>
  555. <div class="feature-item">
  556. <div class="feature-title">双轨制业务模式</div>
  557. <div class="feature-desc">AI快速出图 + 精品定制服务</div>
  558. </div>
  559. <div class="feature-item">
  560. <div class="feature-title">开放API平台</div>
  561. <div class="feature-desc">第三方集成、生态系统建设</div>
  562. </div>
  563. </div>
  564. <div class="resources-needed">
  565. <div class="resources-title">
  566. <i class="fas fa-users me-2"></i>所需资源
  567. </div>
  568. <ul class="resources-list">
  569. <li>AI研发工程师 2名</li>
  570. <li>算法优化专家 1名</li>
  571. <li>产品规划师 1名</li>
  572. <li>技术架构师 1名</li>
  573. </ul>
  574. </div>
  575. </div>
  576. </div>
  577. </div>
  578. <!-- 风险评估与应对策略 -->
  579. <div class="milestone-summary animate__animated animate__fadeIn animate__delay-1s">
  580. <h3 class="text-center mb-4">
  581. <i class="fas fa-shield-alt me-2"></i>风险评估与应对策略
  582. </h3>
  583. <div class="row">
  584. <div class="col-md-6">
  585. <div class="feature-item" style="border-left-color: var(--danger-color);">
  586. <div class="feature-title" style="color: var(--danger-color);">
  587. <i class="fas fa-exclamation-triangle me-2"></i>技术风险
  588. </div>
  589. <div class="feature-desc">
  590. • AI技术成熟度不确定性<br>
  591. • 系统集成复杂度高<br>
  592. • 数据安全和隐私保护<br>
  593. <strong>应对:</strong>分阶段实施,建立备用方案
  594. </div>
  595. </div>
  596. </div>
  597. <div class="col-md-6">
  598. <div class="feature-item" style="border-left-color: var(--warning-color);">
  599. <div class="feature-title" style="color: var(--warning-color);">
  600. <i class="fas fa-users me-2"></i>人员风险
  601. </div>
  602. <div class="feature-desc">
  603. • 关键人员流失<br>
  604. • 新技术学习成本<br>
  605. • 变更管理阻力<br>
  606. <strong>应对:</strong>加强培训,建立激励机制
  607. </div>
  608. </div>
  609. </div>
  610. </div>
  611. <div class="row mt-3">
  612. <div class="col-md-6">
  613. <div class="feature-item" style="border-left-color: var(--info-color);">
  614. <div class="feature-title" style="color: var(--info-color);">
  615. <i class="fas fa-dollar-sign me-2"></i>预算风险
  616. </div>
  617. <div class="feature-desc">
  618. • 开发成本超预算<br>
  619. • 硬件设备投入<br>
  620. • 第三方服务费用<br>
  621. <strong>应对:</strong>制定详细预算,设置缓冲资金
  622. </div>
  623. </div>
  624. </div>
  625. <div class="col-md-6">
  626. <div class="feature-item" style="border-left-color: var(--success-color);">
  627. <div class="feature-title" style="color: var(--success-color);">
  628. <i class="fas fa-clock me-2"></i>时间风险
  629. </div>
  630. <div class="feature-desc">
  631. • 功能开发延期<br>
  632. • 测试时间不足<br>
  633. • 上线时间推迟<br>
  634. <strong>应对:</strong>敏捷开发,MVP先行
  635. </div>
  636. </div>
  637. </div>
  638. </div>
  639. </div>
  640. </div>
  641. <script src="https://cdn.bootcdn.net/ajax/libs/bootstrap/5.3.0/js/bootstrap.bundle.min.js"></script>
  642. <script>
  643. // 滚动触发动画
  644. function animateOnScroll() {
  645. const phases = document.querySelectorAll('.phase-item');
  646. phases.forEach(phase => {
  647. const rect = phase.getBoundingClientRect();
  648. const isVisible = rect.top < window.innerHeight * 0.8;
  649. if (isVisible && !phase.classList.contains('animated')) {
  650. phase.style.opacity = '1';
  651. phase.classList.add('animated');
  652. }
  653. });
  654. }
  655. // 页面加载和滚动时触发动画
  656. window.addEventListener('scroll', animateOnScroll);
  657. window.addEventListener('load', animateOnScroll);
  658. // 数字动画
  659. document.addEventListener('DOMContentLoaded', function() {
  660. const numbers = document.querySelectorAll('.summary-number');
  661. numbers.forEach(num => {
  662. const text = num.textContent;
  663. const hasPlus = text.includes('+');
  664. const finalNumber = parseInt(text);
  665. if (!isNaN(finalNumber)) {
  666. let current = 0;
  667. const increment = finalNumber / 30;
  668. const timer = setInterval(() => {
  669. current += increment;
  670. if (current >= finalNumber) {
  671. num.textContent = finalNumber + (hasPlus ? '+' : '');
  672. clearInterval(timer);
  673. } else {
  674. num.textContent = Math.floor(current) + (hasPlus ? '+' : '');
  675. }
  676. }, 50);
  677. }
  678. });
  679. // 初始触发滚动检查
  680. setTimeout(animateOnScroll, 500);
  681. });
  682. // 阶段节点悬停效果
  683. document.querySelectorAll('.phase-node').forEach(node => {
  684. node.addEventListener('mouseenter', function() {
  685. this.style.transform = 'translateX(-50%) scale(1.2)';
  686. this.style.boxShadow = '0 0 50px rgba(0, 212, 255, 0.8)';
  687. });
  688. node.addEventListener('mouseleave', function() {
  689. this.style.transform = 'translateX(-50%) scale(1)';
  690. this.style.boxShadow = '0 0 30px rgba(0, 212, 255, 0.6)';
  691. });
  692. });
  693. // 功能项动画效果
  694. document.querySelectorAll('.feature-item').forEach(item => {
  695. item.addEventListener('mouseenter', function() {
  696. this.style.transform = 'translateX(10px)';
  697. });
  698. item.addEventListener('mouseleave', function() {
  699. this.style.transform = 'translateX(5px)';
  700. });
  701. });
  702. </script>
  703. </body>
  704. </html>