LoadingSpinner.tsx 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import React from 'react';
  2. import styled, { keyframes } from 'styled-components';
  3. const spin = keyframes`
  4. 0% { transform: rotate(0deg); }
  5. 100% { transform: rotate(360deg); }
  6. `;
  7. const LoadingContainer = styled.div`
  8. display: flex;
  9. flex-direction: column;
  10. justify-content: center;
  11. align-items: center;
  12. height: 100vh;
  13. background: linear-gradient(135deg, #0A1433 0%, #1a2863 50%, #0A1433 100%);
  14. color: #FFFFFF;
  15. `;
  16. const Spinner = styled.div`
  17. width: 3vw;
  18. height: 3vw;
  19. border: 0.2vw solid rgba(255, 255, 255, 0.2);
  20. border-top: 0.2vw solid #FFFFFF;
  21. border-radius: 50%;
  22. animation: ${spin} 1s linear infinite;
  23. margin-bottom: 1vw;
  24. `;
  25. const LoadingText = styled.div`
  26. font-size: 1.2vw;
  27. font-family: 'PingFang SC', 'Microsoft YaHei', Arial, sans-serif;
  28. `;
  29. interface LoadingSpinnerProps {
  30. text?: string;
  31. }
  32. const LoadingSpinner: React.FC<LoadingSpinnerProps> = ({ text = '正在加载...' }) => {
  33. return (
  34. <LoadingContainer>
  35. <Spinner />
  36. <LoadingText>{text}</LoadingText>
  37. </LoadingContainer>
  38. );
  39. };
  40. export default LoadingSpinner;