loading.vue 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. <template>
  2. <div class='loading df jcc aic'>
  3. <div class="loader"></div>
  4. </div>
  5. </template>
  6. <style scoped lang="scss">
  7. .loading {
  8. width: 100%;
  9. height: 100%;
  10. // max-height: 700px;
  11. min-height: 150px;
  12. }
  13. .loader {
  14. width: 2.5em;
  15. height: 2.5em;
  16. transform: rotate(165deg);
  17. &::before,
  18. &::after {
  19. content: '';
  20. position: absolute;
  21. top: 50%;
  22. left: 50%;
  23. display: block;
  24. width: 0.5em;
  25. height: 0.5em;
  26. border-radius: 0.25em;
  27. transform: translate(-50%, -50%);
  28. }
  29. &::before {
  30. animation: before-ani 2s infinite;
  31. }
  32. &::after {
  33. animation: after-ani 2s infinite;
  34. }
  35. }
  36. @keyframes before-ani {
  37. 0% {
  38. width: 0.5em;
  39. box-shadow: 1em -0.5em rgba(225, 20, 98, 0.75), -1em 0.5em rgba(111, 202, 220, 0.75);
  40. }
  41. 35% {
  42. width: 2.5em;
  43. box-shadow: 0 -0.5em rgba(225, 20, 98, 0.75), 0 0.5em rgba(111, 202, 220, 0.75);
  44. }
  45. 70% {
  46. width: 0.5em;
  47. box-shadow: -1em -0.5em rgba(225, 20, 98, 0.75), 1em 0.5em rgba(111, 202, 220, 0.75);
  48. }
  49. 100% {
  50. box-shadow: 1em -0.5em rgba(225, 20, 98, 0.75), -1em 0.5em rgba(111, 202, 220, 0.75);
  51. }
  52. }
  53. @keyframes after-ani {
  54. 0% {
  55. height: 0.5em;
  56. box-shadow: 0.5em 1em rgba(61, 184, 143, 0.75), -0.5em -1em rgba(233, 169, 32, 0.75);
  57. }
  58. 35% {
  59. height: 2.5em;
  60. box-shadow: 0.5em 0 rgba(61, 184, 143, 0.75), -0.5em 0 rgba(233, 169, 32, 0.75);
  61. }
  62. 70% {
  63. height: 0.5em;
  64. box-shadow: 0.5em -1em rgba(61, 184, 143, 0.75), -0.5em 1em rgba(233, 169, 32, 0.75);
  65. }
  66. 100% {
  67. box-shadow: 0.5em 1em rgba(61, 184, 143, 0.75), -0.5em -1em rgba(233, 169, 32, 0.75);
  68. }
  69. }
  70. </style>