index.vue 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. <template>
  2. <div class="app-container home">
  3. <!-- <el-divider /> -->
  4. <div class="index-style">
  5. <div class="typewriter-container">
  6. <span v-for="(char, index) in 'welcome!'" :key="index" :style="{ animationDelay: `${index * 0.5}s` }" class="typewriter-char">{{
  7. char
  8. }}</span>
  9. </div>
  10. </div>
  11. </div>
  12. </template>
  13. <script setup name="Index" lang="ts">
  14. const goTarget = (url: string) => {
  15. window.open(url, '__blank');
  16. };
  17. </script>
  18. <style lang="scss" scoped>
  19. .home {
  20. blockquote {
  21. padding: 10px 20px;
  22. margin: 0 0 20px;
  23. font-size: 17.5px;
  24. border-left: 5px solid #eee;
  25. }
  26. hr {
  27. margin-top: 20px;
  28. margin-bottom: 20px;
  29. border: 0;
  30. border-top: 1px solid #eee;
  31. }
  32. .col-item {
  33. margin-bottom: 20px;
  34. }
  35. ul {
  36. padding: 0;
  37. margin: 0;
  38. }
  39. font-family: 'open sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
  40. font-size: 13px;
  41. color: #676a6c;
  42. overflow-x: hidden;
  43. ul {
  44. list-style-type: none;
  45. }
  46. h4 {
  47. margin-top: 0px;
  48. }
  49. h2 {
  50. margin-top: 10px;
  51. font-size: 26px;
  52. font-weight: 100;
  53. }
  54. p {
  55. margin-top: 10px;
  56. b {
  57. font-weight: 700;
  58. }
  59. }
  60. .update-log {
  61. ol {
  62. display: block;
  63. list-style-type: decimal;
  64. margin-block-start: 1em;
  65. margin-block-end: 1em;
  66. margin-inline-start: 0;
  67. margin-inline-end: 0;
  68. padding-inline-start: 40px;
  69. }
  70. }
  71. .index-style {
  72. font-size: 48px;
  73. font-weight: bold;
  74. letter-spacing: 15px;
  75. display: flex;
  76. justify-content: center;
  77. align-items: center;
  78. height: 300px;
  79. background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
  80. border-radius: 10px;
  81. box-shadow: 0 10px 20px rgba(0, 0, 0, 0.1);
  82. .typewriter-container {
  83. display: flex;
  84. }
  85. .typewriter-char {
  86. opacity: 0;
  87. transform: translateY(20px) rotate(-5deg);
  88. animation:
  89. typewriter-animation 0.8s ease forwards,
  90. pulse 2s ease-in-out infinite 1s;
  91. color: #2d8cf0;
  92. text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.2);
  93. transition: color 0.3s ease;
  94. &:hover {
  95. color: #f06292;
  96. transform: scale(1.1);
  97. animation-play-state: paused;
  98. }
  99. }
  100. }
  101. @keyframes typewriter-animation {
  102. 0% {
  103. opacity: 0;
  104. transform: translateY(20px) rotate(-5deg);
  105. }
  106. 50% {
  107. opacity: 0.5;
  108. transform: translateY(10px) rotate(-2deg);
  109. }
  110. 100% {
  111. opacity: 1;
  112. transform: translateY(0) rotate(0deg);
  113. }
  114. }
  115. @keyframes pulse {
  116. 0% {
  117. text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.2);
  118. transform: scale(1);
  119. }
  120. 50% {
  121. text-shadow:
  122. 0 0 15px rgba(45, 140, 240, 0.8),
  123. 0 0 30px rgba(45, 140, 240, 0.4);
  124. transform: scale(1.05);
  125. }
  126. 100% {
  127. text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.2);
  128. transform: scale(1);
  129. }
  130. }
  131. }
  132. </style>