favorite.html 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  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. <style>
  8. * {
  9. margin: 0;
  10. padding: 0;
  11. box-sizing: border-box;
  12. }
  13. body {
  14. font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
  15. background-color: #f6f6f6;
  16. color: #333;
  17. }
  18. .header {
  19. background: white;
  20. padding: 16px;
  21. position: relative;
  22. box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
  23. }
  24. .header-title {
  25. text-align: center;
  26. font-size: 18px;
  27. font-weight: bold;
  28. }
  29. .favorite-list {
  30. margin: 16px;
  31. }
  32. .station-card {
  33. background: white;
  34. border-radius: 12px;
  35. padding: 16px;
  36. margin-bottom: 12px;
  37. position: relative;
  38. }
  39. .station-header {
  40. display: flex;
  41. justify-content: space-between;
  42. align-items: center;
  43. margin-bottom: 12px;
  44. }
  45. .station-name {
  46. font-size: 16px;
  47. font-weight: bold;
  48. }
  49. .unfavorite-btn {
  50. background: none;
  51. border: none;
  52. color: #ff6b6b;
  53. font-size: 14px;
  54. cursor: pointer;
  55. padding: 4px 8px;
  56. border-radius: 4px;
  57. }
  58. .unfavorite-btn:hover {
  59. background: #fff1f1;
  60. }
  61. .station-info {
  62. font-size: 14px;
  63. color: #666;
  64. margin-bottom: 8px;
  65. }
  66. .station-status {
  67. display: inline-block;
  68. padding: 4px 8px;
  69. background: #e8f5e9;
  70. color: #4CAF50;
  71. border-radius: 4px;
  72. font-size: 12px;
  73. }
  74. .empty-state {
  75. text-align: center;
  76. padding: 40px 16px;
  77. color: #999;
  78. }
  79. .tab-bar {
  80. position: fixed;
  81. bottom: 0;
  82. width: 100%;
  83. background: white;
  84. display: flex;
  85. padding: 8px 0;
  86. border-top: 1px solid #eee;
  87. z-index: 1000;
  88. }
  89. .tab-item {
  90. flex: 1;
  91. text-align: center;
  92. color: #999;
  93. font-size: 12px;
  94. padding: 4px 0;
  95. display: flex;
  96. flex-direction: column;
  97. align-items: center;
  98. transition: all 0.3s ease;
  99. cursor: pointer;
  100. }
  101. .tab-item svg {
  102. width: 24px;
  103. height: 24px;
  104. margin-bottom: 4px;
  105. fill: currentColor;
  106. transition: all 0.3s ease;
  107. }
  108. .tab-item.active {
  109. color: #4CAF50;
  110. transform: scale(1.1);
  111. }
  112. </style>
  113. </head>
  114. <body>
  115. <div class="header">
  116. <div class="header-title">我的收藏</div>
  117. </div>
  118. <div class="favorite-list">
  119. <div class="station-card">
  120. <div class="station-header">
  121. <div class="station-name">星星充电站 - 望京SOHO</div>
  122. <button class="unfavorite-btn">取消收藏</button>
  123. </div>
  124. <div class="station-info">地址:北京市朝阳区望京SOHO T1</div>
  125. <div class="station-info">距离:1.2km</div>
  126. <div class="station-status">8个空闲充电桩</div>
  127. </div>
  128. <div class="station-card">
  129. <div class="station-header">
  130. <div class="station-name">特来电充电站 - 三里屯</div>
  131. <button class="unfavorite-btn">取消收藏</button>
  132. </div>
  133. <div class="station-info">地址:北京市朝阳区三里屯太古里</div>
  134. <div class="station-info">距离:2.5km</div>
  135. <div class="station-status">4个空闲充电桩</div>
  136. </div>
  137. </div>
  138. <div class="tab-bar">
  139. <div class="tab-item">
  140. <svg>
  141. <use xlink:href="./images/icons.svg#icon-home" />
  142. </svg>
  143. <span>首页</span>
  144. </div>
  145. <div class="tab-item">
  146. <svg>
  147. <use xlink:href="./images/icons.svg#icon-list" />
  148. </svg>
  149. <span>列表</span>
  150. </div>
  151. <div class="tab-item active">
  152. <svg>
  153. <use xlink:href="./images/icons.svg#icon-favorite" />
  154. </svg>
  155. <span>收藏</span>
  156. </div>
  157. <div class="tab-item">
  158. <svg>
  159. <use xlink:href="./images/icons.svg#icon-person" />
  160. </svg>
  161. <span>我的</span>
  162. </div>
  163. </div>
  164. <script>
  165. // 底部导航栏交互
  166. document.querySelectorAll('.tab-item').forEach(item => {
  167. item.addEventListener('click', function () {
  168. // 移除其他项的active类
  169. document.querySelectorAll('.tab-item').forEach(tab => {
  170. tab.classList.remove('active');
  171. });
  172. // 为当前点击项添加active类
  173. this.classList.add('active');
  174. });
  175. });
  176. // 取消收藏按钮交互
  177. document.querySelectorAll('.unfavorite-btn').forEach(btn => {
  178. btn.addEventListener('click', function () {
  179. const card = this.closest('.station-card');
  180. card.style.opacity = '0';
  181. card.style.transform = 'translateX(100%)';
  182. card.style.transition = 'all 0.3s ease';
  183. setTimeout(() => {
  184. card.remove();
  185. // 检查是否还有收藏的充电站
  186. const remainingCards = document.querySelectorAll('.station-card');
  187. if (remainingCards.length === 0) {
  188. const emptyState = document.createElement('div');
  189. emptyState.className = 'empty-state';
  190. emptyState.textContent = '暂无收藏的充电站';
  191. document.querySelector('.favorite-list').appendChild(emptyState);
  192. }
  193. }, 300);
  194. });
  195. });
  196. </script>
  197. </body>
  198. </html>