当前位置:   article > 正文

vue2流星雨(可调角度)

vue2流星雨(可调角度)

新建StarBackground.vue组件

打开组件注释部分可以随机颜色

  1. <template>
  2. <div class="rain">
  3. <div
  4. v-for="(item,index) in rainNumber"
  5. :key="index"
  6. class="rain-item"
  7. ref="rain-item"
  8. :style="`transform:rotate(${rotateDeg}deg);width:${w}px;height:${h}px;`"
  9. >
  10. <div ref="line-item" class="line" :style="`animationDelay:${index*100}ms`"></div>
  11. </div>
  12. </div>
  13. </template>
  14. <script>
  15. export default {
  16. data () {
  17. return {
  18. timer1: null
  19. }
  20. },
  21. props: {
  22. rainNumber: {
  23. type: Number,
  24. default: 0
  25. },
  26. rotateDeg: {
  27. type: Number,
  28. default: 0
  29. },
  30. w: {
  31. type: Number,
  32. default: 0
  33. },
  34. h: {
  35. type: Number,
  36. default: 0
  37. }
  38. },
  39. mounted () {
  40. this.randomRain()
  41. },
  42. methods: {
  43. randomRain () {
  44. let rainArr = this.$refs['rain-item']
  45. // let lineArr = this.$refs['line-item']
  46. rainArr.forEach((item) => {
  47. item.style.top = Math.floor(Math.random() * 0 + 750) + 'px'
  48. item.style.left = Math.floor(Math.random() * 2000 + 1) + 'px'
  49. })
  50. // let n = 0
  51. // lineArr.forEach((item) => {
  52. // item.style.background = this.generateRandomColors(40)[n++]
  53. // })
  54. },
  55. generateRandomColor() {
  56. const randomRed = Math.floor(Math.random() * 256); // 生成一个0255之间的随机整数,代表红色通道的值。
  57. const randomGreen = Math.floor(Math.random() * 256); // 生成一个0255之间的随机整数,代表绿色通道的值。
  58. const randomBlue = Math.floor(Math.random() * 256); // 生成一个0255之间的随机整数,代表蓝色通道的值。
  59. return `rgb(${randomRed}, ${randomGreen}, ${randomBlue})`; // 返回一个字符串,格式为rgb(red, green, blue)
  60. },
  61. generateRandomColors(n) {
  62. const colors = [];
  63. for (let i = 0; i < n; i++) { // 循环n次,每次调用generateRandomColor函数生成一个颜色值,并将其添加到colors数组中。
  64. colors.push(this.generateRandomColor());
  65. }
  66. return colors;
  67. }
  68. },
  69. beforeDestroy () {
  70. clearInterval(this.timer1)
  71. }
  72. }
  73. </script>
  74. <style lang='scss' scoped>
  75. .rain {
  76. width: 100%;
  77. height: 100vh;
  78. position: relative;
  79. .rain-item {
  80. position: absolute;
  81. width: 2px;
  82. height: 30px;
  83. display: inline-block;
  84. .line {
  85. animation: raining 2s infinite linear;
  86. position: absolute;
  87. content: "";
  88. top: -30px;
  89. left: 0;
  90. width: 100%;
  91. height: 100%;
  92. box-shadow: 0px 5px 20px 0px #fcfcfc;
  93. /* background: linear-gradient( //单独一种颜色
  94. to top,
  95. rgb(18, 142, 205),
  96. rgba(18, 142, 205, 0.1)
  97. );*/
  98. }
  99. }
  100. }
  101. @keyframes raining {
  102. 0% {
  103. //transform: translateY(100%);
  104. top: -0;
  105. opacity: 0;
  106. }
  107. 10% {
  108. top: 100px;
  109. opacity: 0.3;
  110. }
  111. 25% {
  112. top: 200px;
  113. opacity: 0.5;
  114. }
  115. 50% {
  116. top: 400px;
  117. opacity: 0.8;
  118. }
  119. 75% {
  120. top: 600px;
  121. opacity: 0.5;
  122. }
  123. 100% {
  124. top: 800px;
  125. opacity: 0.3;
  126. transform: translateY(-100%);
  127. }
  128. }
  129. </style>

在需要使用的页面引用

  1. <style scoped>
  2. .login-container {
  3. height: 100%;
  4. width: 50%;
  5. overflow: hidden;
  6. position: absolute;
  7. top: 50%;
  8. left: 50%;
  9. transform: translate(-50%, -50%);
  10. background-color: black;
  11. }
  12. </style>
  13. <template>
  14. <div class="box" style="width: 100%;height: 100vh;">
  15. <div class="login-container">
  16. <!-- rainNumber:线条数量 rotateDeg:旋转角度 w:线条宽度 h:线条高度-->
  17. <rain :rainNumber="40" :rotateDeg="180" :w="2" :h="140"></rain>
  18. </div>
  19. </div>
  20. </template>
  21. <script>
  22. import rain from '@/components/StarBackground.vue';
  23. export default {
  24. components: {
  25. rain
  26. },
  27. };
  28. </script>
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/620477
推荐阅读
相关标签
  

闽ICP备14008679号