123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215 |
- <template>
- <view class="vastwu-barrage" :style="{width:width,height:height}">
- <block v-for="(item,index) in items" :key="index">
- <!-- 每个盒子不一定只放一个 -->
- <view class="barrages" :style="{top: `${trackList[index]}rpx`
- }">
- <view class="barrage" v-for="(tx,i) in item.textList" :key="i">
- {{tx.text}}
- </view>
- <view class="barrage" v-for="(tx,i) in item.textList" :key="i">
- {{tx.text}}
- </view>
- </view>
- </block>
- </view>
- </template>
- <script>
- export default {
- name: 'vastwu-barrage',
- props: {
- textList1: {
- type: Array
- },
- trackList: {
- type: Array,
- default: function() {
- return [0, 100, 200]
- }
- },
- icon: {
- type: String,
- default: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-d0fe8d48-ece3-4582-a195-6929fb47a9c5/43a4f7a7-ff65-4460-b774-1249f31fbef7.png'
- },
- minTime: {
- type: Number,
- default: 7
- },
- maxTime: {
- type: Number,
- default: 10
- },
- width: {
- type: String,
- default: '750rpx'
- },
- height: {
- type: String,
- default: '100%'
- }
- },
- data() {
- return {
- items: [],
- values: '',
- textIndex: 0
- }
- },
- created() {
- this.values = this.items.length
- },
- watch: {
- // textList1(n, o) {
- // if (n != o) {
- // console.log('textList1-----', n);
- // this.init(n)
- // }
- // }
- },
- methods: {
- add(text = '', time = this.randomNum(this.minTime, this.maxTime)) {
- if (this.items.length >= this.trackList.length) {
- if (this.textIndex < this.trackList.length) {
- this.items[this.textIndex].textList.push(text);
- this.textIndex++;
- } else {
- this.textIndex = 0
- this.items[this.textIndex].textList.push(text);
- this.textIndex++;
- }
- } else {
- this.items.push({
- textList: [text],
- time,
- color: 'black',
- paused: '',
- });
- }
- },
- init(items = []) {
- this.items = [];
- let i = 0;
- this.values = items.length;
- for (let i = 0; i < items.length; i++) {
- let time = 10;
- time = this.randomNum(this.minTime, this.maxTime);
- this.add(items[i], time);
- }
- },
- //生成从minNum到maxNum的随机数
- randomNum(minNum, maxNum) {
- switch (arguments.length) {
- case 1:
- return parseInt(Math.random() * minNum + 1, 10);
- break;
- case 2:
- return parseInt(Math.random() * (maxNum - minNum + 1) + minNum, 10);
- break;
- default:
- return 0;
- break;
- }
- }
- }
- }
- </script>
- <style>
- .barrages {
- position: absolute;
- white-space: nowrap;
- animation: mymove 7s linear infinite;
- animation-timing-function: linear;
- -webkit-animation-timing-function: linear;
- animation-fill-mode: forwards;
- -webkit-backface-visibility: hidden;
- -moz-backface-visibility: hidden;
- -ms-backface-visibility: hidden;
- backface-visibility: hidden;
- -webkit-perspective: 1000;
- -moz-perspective: 1000;
- -ms-perspective: 1000;
- perspective: 1000;
- /* Other transform properties here */
- }
- .barrage {
- position: relative;
- padding: 0 48rpx;
- border-radius: 32rpx;
- background-color: #E5E9EE;
- margin-right: 16rpx;
- display: inline-block;
- font-size: 24rpx;
- height: 56rpx;
- line-height: 56rpx;
- }
- .vastwu-barrage {
- z-index: 3;
- position: relative;
- overflow: hidden;
- }
- @keyframes mymove {
- from {
- /* left: 100%; */
- transform: translateX(0rpx);
- }
- to {
- /* left: -120%; */
- transform: translateX(-50%);
- }
- }
- @-moz-keyframes mymove
- /* Firefox */
- {
- from {
- /* left: 100%; */
- transform: translateX(0rpx);
- }
- to {
- /* left: -120%; */
- transform: translateX(-50%);
- }
- }
- @-webkit-keyframes mymove
- /* Safari and Chrome */
- {
- from {
- /* left: 100%; */
- transform: translateX(0rpx);
- }
- to {
- /* left: -120%; */
- transform: translateX(-50%);
- }
- }
- @-o-keyframes mymove
- /* Opera */
- {
- from {
- /* left: 100%; */
- transform: translateX(0rpx);
- }
- to {
- /* left: -120%; */
- transform: translateX(-50%);
- }
- }
- </style>
|