| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 |
- /**
- * haha-mp 全局动画样式
- * 使用纯CSS动画类,避免SCSS mixins的导入问题
- */
- /* ========== 淡入淡出 ========== */
- @keyframes fadeIn {
- from { opacity: 0; }
- to { opacity: 1; }
- }
- @keyframes fadeOut {
- from { opacity: 1; }
- to { opacity: 0; }
- }
- /* ========== 滑入效果 ========== */
- @keyframes slideUp {
- from {
- opacity: 0;
- transform: translateY(40rpx);
- }
- to {
- opacity: 1;
- transform: translateY(0);
- }
- }
- @keyframes slideDown {
- from {
- opacity: 0;
- transform: translateY(-40rpx);
- }
- to {
- opacity: 1;
- transform: translateY(0);
- }
- }
- @keyframes slideLeft {
- from {
- opacity: 0;
- transform: translateX(40rpx);
- }
- to {
- opacity: 1;
- transform: translateX(0);
- }
- }
- @keyframes slideRight {
- from {
- opacity: 0;
- transform: translateX(-40rpx);
- }
- to {
- opacity: 1;
- transform: translateX(0);
- }
- }
- /* ========== 缩放效果 ========== */
- @keyframes scaleIn {
- from {
- opacity: 0;
- transform: scale(0.9);
- }
- to {
- opacity: 1;
- transform: scale(1);
- }
- }
- @keyframes scaleOut {
- from {
- opacity: 1;
- transform: scale(1);
- }
- to {
- opacity: 0;
- transform: scale(0.9);
- }
- }
- /* ========== 脉冲动画 ========== */
- @keyframes pulse {
- 0%, 100% {
- transform: scale(1);
- opacity: 0.3;
- }
- 50% {
- transform: scale(1.05);
- opacity: 0.5;
- }
- }
- /* ========== 呼吸动画 ========== */
- @keyframes breathe {
- 0%, 100% {
- transform: scale(1);
- }
- 50% {
- transform: scale(1.02);
- }
- }
- /* ========== 骨架屏闪烁 ========== */
- @keyframes skeleton {
- 0%, 100% {
- background-color: #F5F5F5;
- }
- 50% {
- background-color: #EEEEEE;
- }
- }
- /* ========== 旋转加载 ========== */
- @keyframes spin {
- to {
- transform: rotate(360deg);
- }
- }
- /* ========== 抖动效果 ========== */
- @keyframes shake {
- 0%, 100% { transform: translateX(0); }
- 10%, 30%, 50%, 70%, 90% { transform: translateX(-8rpx); }
- 20%, 40%, 60%, 80% { transform: translateX(8rpx); }
- }
- /* ========== 弹跳效果 ========== */
- @keyframes bounce {
- 0% {
- transform: scale(0);
- opacity: 0;
- }
- 50% {
- transform: scale(1.1);
- }
- 100% {
- transform: scale(1);
- opacity: 1;
- }
- }
- /* ========== 通用动画类 ========== */
- .animate-fade-in {
- animation: fadeIn 300ms cubic-bezier(0.25, 0.1, 0.25, 1);
- }
- .animate-fade-out {
- animation: fadeOut 300ms cubic-bezier(0.25, 0.1, 0.25, 1);
- }
- .animate-slide-up {
- animation: slideUp 300ms cubic-bezier(0.25, 0.1, 0.25, 1);
- }
- .animate-slide-down {
- animation: slideDown 300ms cubic-bezier(0.25, 0.1, 0.25, 1);
- }
- .animate-slide-left {
- animation: slideLeft 300ms cubic-bezier(0.25, 0.1, 0.25, 1);
- }
- .animate-slide-right {
- animation: slideRight 300ms cubic-bezier(0.25, 0.1, 0.25, 1);
- }
- .animate-scale-in {
- animation: scaleIn 300ms cubic-bezier(0.68, -0.55, 0.265, 1.55);
- }
- .animate-scale-out {
- animation: scaleOut 300ms cubic-bezier(0.25, 0.1, 0.25, 1);
- }
- .animate-pulse {
- animation: pulse 2s cubic-bezier(0.42, 0, 0.58, 1) infinite;
- }
- .animate-breathe {
- animation: breathe 3s cubic-bezier(0.42, 0, 0.58, 1) infinite;
- }
- .animate-skeleton {
- animation: skeleton 1.5s cubic-bezier(0.42, 0, 0.58, 1) infinite;
- }
- .animate-spin {
- animation: spin 0.8s linear infinite;
- }
- .animate-shake {
- animation: shake 0.5s cubic-bezier(0.42, 0, 0.58, 1);
- }
- .animate-bounce {
- animation: bounce 0.6s cubic-bezier(0.68, -0.55, 0.265, 1.55);
- }
- /* ========== 延迟动画类 ========== */
- .delay-100 { animation-delay: 100ms; }
- .delay-200 { animation-delay: 200ms; }
- .delay-300 { animation-delay: 300ms; }
- .delay-400 { animation-delay: 400ms; }
- .delay-500 { animation-delay: 500ms; }
- /* ========== GPU加速 ========== */
- .gpu-accelerated {
- transform: translateZ(0);
- will-change: transform, opacity;
- }
|