animations.css 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. /**
  2. * haha-mp 全局动画样式
  3. * 使用纯CSS动画类,避免SCSS mixins的导入问题
  4. */
  5. /* ========== 淡入淡出 ========== */
  6. @keyframes fadeIn {
  7. from { opacity: 0; }
  8. to { opacity: 1; }
  9. }
  10. @keyframes fadeOut {
  11. from { opacity: 1; }
  12. to { opacity: 0; }
  13. }
  14. /* ========== 滑入效果 ========== */
  15. @keyframes slideUp {
  16. from {
  17. opacity: 0;
  18. transform: translateY(40rpx);
  19. }
  20. to {
  21. opacity: 1;
  22. transform: translateY(0);
  23. }
  24. }
  25. @keyframes slideDown {
  26. from {
  27. opacity: 0;
  28. transform: translateY(-40rpx);
  29. }
  30. to {
  31. opacity: 1;
  32. transform: translateY(0);
  33. }
  34. }
  35. @keyframes slideLeft {
  36. from {
  37. opacity: 0;
  38. transform: translateX(40rpx);
  39. }
  40. to {
  41. opacity: 1;
  42. transform: translateX(0);
  43. }
  44. }
  45. @keyframes slideRight {
  46. from {
  47. opacity: 0;
  48. transform: translateX(-40rpx);
  49. }
  50. to {
  51. opacity: 1;
  52. transform: translateX(0);
  53. }
  54. }
  55. /* ========== 缩放效果 ========== */
  56. @keyframes scaleIn {
  57. from {
  58. opacity: 0;
  59. transform: scale(0.9);
  60. }
  61. to {
  62. opacity: 1;
  63. transform: scale(1);
  64. }
  65. }
  66. @keyframes scaleOut {
  67. from {
  68. opacity: 1;
  69. transform: scale(1);
  70. }
  71. to {
  72. opacity: 0;
  73. transform: scale(0.9);
  74. }
  75. }
  76. /* ========== 脉冲动画 ========== */
  77. @keyframes pulse {
  78. 0%, 100% {
  79. transform: scale(1);
  80. opacity: 0.3;
  81. }
  82. 50% {
  83. transform: scale(1.05);
  84. opacity: 0.5;
  85. }
  86. }
  87. /* ========== 呼吸动画 ========== */
  88. @keyframes breathe {
  89. 0%, 100% {
  90. transform: scale(1);
  91. }
  92. 50% {
  93. transform: scale(1.02);
  94. }
  95. }
  96. /* ========== 骨架屏闪烁 ========== */
  97. @keyframes skeleton {
  98. 0%, 100% {
  99. background-color: #F5F5F5;
  100. }
  101. 50% {
  102. background-color: #EEEEEE;
  103. }
  104. }
  105. /* ========== 旋转加载 ========== */
  106. @keyframes spin {
  107. to {
  108. transform: rotate(360deg);
  109. }
  110. }
  111. /* ========== 抖动效果 ========== */
  112. @keyframes shake {
  113. 0%, 100% { transform: translateX(0); }
  114. 10%, 30%, 50%, 70%, 90% { transform: translateX(-8rpx); }
  115. 20%, 40%, 60%, 80% { transform: translateX(8rpx); }
  116. }
  117. /* ========== 弹跳效果 ========== */
  118. @keyframes bounce {
  119. 0% {
  120. transform: scale(0);
  121. opacity: 0;
  122. }
  123. 50% {
  124. transform: scale(1.1);
  125. }
  126. 100% {
  127. transform: scale(1);
  128. opacity: 1;
  129. }
  130. }
  131. /* ========== 通用动画类 ========== */
  132. .animate-fade-in {
  133. animation: fadeIn 300ms cubic-bezier(0.25, 0.1, 0.25, 1);
  134. }
  135. .animate-fade-out {
  136. animation: fadeOut 300ms cubic-bezier(0.25, 0.1, 0.25, 1);
  137. }
  138. .animate-slide-up {
  139. animation: slideUp 300ms cubic-bezier(0.25, 0.1, 0.25, 1);
  140. }
  141. .animate-slide-down {
  142. animation: slideDown 300ms cubic-bezier(0.25, 0.1, 0.25, 1);
  143. }
  144. .animate-slide-left {
  145. animation: slideLeft 300ms cubic-bezier(0.25, 0.1, 0.25, 1);
  146. }
  147. .animate-slide-right {
  148. animation: slideRight 300ms cubic-bezier(0.25, 0.1, 0.25, 1);
  149. }
  150. .animate-scale-in {
  151. animation: scaleIn 300ms cubic-bezier(0.68, -0.55, 0.265, 1.55);
  152. }
  153. .animate-scale-out {
  154. animation: scaleOut 300ms cubic-bezier(0.25, 0.1, 0.25, 1);
  155. }
  156. .animate-pulse {
  157. animation: pulse 2s cubic-bezier(0.42, 0, 0.58, 1) infinite;
  158. }
  159. .animate-breathe {
  160. animation: breathe 3s cubic-bezier(0.42, 0, 0.58, 1) infinite;
  161. }
  162. .animate-skeleton {
  163. animation: skeleton 1.5s cubic-bezier(0.42, 0, 0.58, 1) infinite;
  164. }
  165. .animate-spin {
  166. animation: spin 0.8s linear infinite;
  167. }
  168. .animate-shake {
  169. animation: shake 0.5s cubic-bezier(0.42, 0, 0.58, 1);
  170. }
  171. .animate-bounce {
  172. animation: bounce 0.6s cubic-bezier(0.68, -0.55, 0.265, 1.55);
  173. }
  174. /* ========== 延迟动画类 ========== */
  175. .delay-100 { animation-delay: 100ms; }
  176. .delay-200 { animation-delay: 200ms; }
  177. .delay-300 { animation-delay: 300ms; }
  178. .delay-400 { animation-delay: 400ms; }
  179. .delay-500 { animation-delay: 500ms; }
  180. /* ========== GPU加速 ========== */
  181. .gpu-accelerated {
  182. transform: translateZ(0);
  183. will-change: transform, opacity;
  184. }