vastwu-barrage1.vue 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. <template>
  2. <view class="vastwu-barrage" :style="{width:width,height:height}">
  3. <block v-for="(item,index) in items" :key="index">
  4. <!-- 每个盒子不一定只放一个 -->
  5. <view class="barrages" :style="{top: `${trackList[index]}rpx`
  6. }">
  7. <view class="barrage" v-for="(tx,i) in item.textList" :key="i">
  8. {{tx.text}}
  9. </view>
  10. <view class="barrage" v-for="(tx,i) in item.textList" :key="i">
  11. {{tx.text}}
  12. </view>
  13. </view>
  14. </block>
  15. </view>
  16. </template>
  17. <script>
  18. export default {
  19. name: 'vastwu-barrage',
  20. props: {
  21. textList1: {
  22. type: Array
  23. },
  24. trackList: {
  25. type: Array,
  26. default: function() {
  27. return [0, 100, 200]
  28. }
  29. },
  30. icon: {
  31. type: String,
  32. default: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-d0fe8d48-ece3-4582-a195-6929fb47a9c5/43a4f7a7-ff65-4460-b774-1249f31fbef7.png'
  33. },
  34. minTime: {
  35. type: Number,
  36. default: 7
  37. },
  38. maxTime: {
  39. type: Number,
  40. default: 10
  41. },
  42. width: {
  43. type: String,
  44. default: '750rpx'
  45. },
  46. height: {
  47. type: String,
  48. default: '100%'
  49. }
  50. },
  51. data() {
  52. return {
  53. items: [],
  54. values: '',
  55. textIndex: 0
  56. }
  57. },
  58. created() {
  59. this.values = this.items.length
  60. },
  61. watch: {
  62. // textList1(n, o) {
  63. // if (n != o) {
  64. // console.log('textList1-----', n);
  65. // this.init(n)
  66. // }
  67. // }
  68. },
  69. methods: {
  70. add(text = '', time = this.randomNum(this.minTime, this.maxTime)) {
  71. if (this.items.length >= this.trackList.length) {
  72. if (this.textIndex < this.trackList.length) {
  73. this.items[this.textIndex].textList.push(text);
  74. this.textIndex++;
  75. } else {
  76. this.textIndex = 0
  77. this.items[this.textIndex].textList.push(text);
  78. this.textIndex++;
  79. }
  80. } else {
  81. this.items.push({
  82. textList: [text],
  83. time,
  84. color: 'black',
  85. paused: '',
  86. });
  87. }
  88. },
  89. init(items = []) {
  90. this.items = [];
  91. let i = 0;
  92. this.values = items.length;
  93. for (let i = 0; i < items.length; i++) {
  94. let time = 10;
  95. time = this.randomNum(this.minTime, this.maxTime);
  96. this.add(items[i], time);
  97. }
  98. },
  99. //生成从minNum到maxNum的随机数
  100. randomNum(minNum, maxNum) {
  101. switch (arguments.length) {
  102. case 1:
  103. return parseInt(Math.random() * minNum + 1, 10);
  104. break;
  105. case 2:
  106. return parseInt(Math.random() * (maxNum - minNum + 1) + minNum, 10);
  107. break;
  108. default:
  109. return 0;
  110. break;
  111. }
  112. }
  113. }
  114. }
  115. </script>
  116. <style>
  117. .barrages {
  118. position: absolute;
  119. white-space: nowrap;
  120. animation: mymove 7s linear infinite;
  121. animation-timing-function: linear;
  122. -webkit-animation-timing-function: linear;
  123. animation-fill-mode: forwards;
  124. -webkit-backface-visibility: hidden;
  125. -moz-backface-visibility: hidden;
  126. -ms-backface-visibility: hidden;
  127. backface-visibility: hidden;
  128. -webkit-perspective: 1000;
  129. -moz-perspective: 1000;
  130. -ms-perspective: 1000;
  131. perspective: 1000;
  132. /* Other transform properties here */
  133. }
  134. .barrage {
  135. position: relative;
  136. padding: 0 48rpx;
  137. border-radius: 32rpx;
  138. background-color: #E5E9EE;
  139. margin-right: 16rpx;
  140. display: inline-block;
  141. font-size: 24rpx;
  142. height: 56rpx;
  143. line-height: 56rpx;
  144. }
  145. .vastwu-barrage {
  146. z-index: 3;
  147. position: relative;
  148. overflow: hidden;
  149. }
  150. @keyframes mymove {
  151. from {
  152. /* left: 100%; */
  153. transform: translateX(0rpx);
  154. }
  155. to {
  156. /* left: -120%; */
  157. transform: translateX(-50%);
  158. }
  159. }
  160. @-moz-keyframes mymove
  161. /* Firefox */
  162. {
  163. from {
  164. /* left: 100%; */
  165. transform: translateX(0rpx);
  166. }
  167. to {
  168. /* left: -120%; */
  169. transform: translateX(-50%);
  170. }
  171. }
  172. @-webkit-keyframes mymove
  173. /* Safari and Chrome */
  174. {
  175. from {
  176. /* left: 100%; */
  177. transform: translateX(0rpx);
  178. }
  179. to {
  180. /* left: -120%; */
  181. transform: translateX(-50%);
  182. }
  183. }
  184. @-o-keyframes mymove
  185. /* Opera */
  186. {
  187. from {
  188. /* left: 100%; */
  189. transform: translateX(0rpx);
  190. }
  191. to {
  192. /* left: -120%; */
  193. transform: translateX(-50%);
  194. }
  195. }
  196. </style>