自学内容网 自学内容网

vue3+vant实现弹幕循环播放~

1、效果图

<!-- 弹幕 -->
<div style="height: 88px">
    <van-barrage
    v-model="list"
    duration="5000"
    :rows="rows"
    :gap="gap"
    :loop="loop"
    style="--move-distance: -345px"
>
        <div class="video" style="width: 345px; height: 98px"></div>
    </van-barrage>
</div>

import { ref, onMounted, watchEffect } from 'vue'
const defaultList = ref([
  { id: 1, text: '可定制3' },
  { id: 2, text: '可定制4' },
  { id: 3, text: '可定制5' },
  { id: 4, text: '可定制6' },
  { id: 5, text: '可定制7' },
  { id: 6, text: '可定制8' }
])

const list = ref([])
const rows = ref(3) // 设置弹幕行数为3
const gap = ref(20) // 设置弹幕之间的左右间距为10px
const loop = ref(true) // 设置弹幕循环播放
let intervalId
const changeTabs = e => {
  defaultList.value = [
    { id: 1, text: '可定制3' },
    { id: 2, text: '可定制4' },
    { id: 3, text: '可定制5' },
    { id: 4, text: '可定制6' },
    { id: 5, text: '可定制7' },
    { id: 6, text: '可定制8' }
  ]
  list.value = []
  if (e == 1) {
    //循环播放弹幕
    intervalId = setInterval(() => {
      if (defaultList.value.length > 0) {
        const firstWish = defaultList.value.shift() // 移除第一个弹幕
        list.value.push(firstWish) // 将第一个弹幕添加到末尾
        defaultList.value.push(firstWish) // 将第一个弹幕添加到末尾
      }
    }, 1000) // 每1秒移动一次弹幕
  } else {
    clearInterval(intervalId) //避免弹幕重叠
  }
  //检测用户是否离开当前页面,解决用户离开此页面之后又重新进来,造成的短暂弹幕重叠问题
  document.addEventListener('visibilitychange', function (e) {
    let state = document.visibilityState
    if (state === 'hidden') {
      console.log('用户离开了')
      clearInterval(intervalId) //避免弹幕重叠
    } else if (state === 'visible') {
      console.log('回来了')
      //循环播放弹幕
      intervalId = setInterval(() => {
        if (defaultList.value.length > 0) {
          const firstWish = defaultList.value.shift() // 移除第一个弹幕
          list.value.push(firstWish) // 将第一个弹幕添加到末尾
          defaultList.value.push(firstWish) // 将第一个弹幕添加到末尾
        }
      }, 1000) // 每1秒移动一次弹幕
    }
  })
}


//tabs已激活状态
:deep(.van-tab--card.van-tab--active) {
  background: rgba(0, 161, 152, 0.1);
  border-radius: 4px;
  color: #00a198;
}
//tabs未激活状态背景
:deep(.van-tab--shrink) {
  background: rgba(167, 167, 167, 0.1);
  border-radius: 4px;
  // color:red;
}
//tabs未激活状态文字
:deep(.van-tab--card) {
  font-family:
    PingFangSC,
    PingFang SC;
  font-weight: 400;
  font-size: 12px;
  color: #666666;
  line-height: 17px;
  text-align: left;
  font-style: normal;
  margin-right: 20px;
  width: 56px;
  height: 21px;
}
.van-tabs_div {
  margin-top: 10px;
  margin-bottom: 14px;
}


原文地址:https://blog.csdn.net/m0_62626838/article/details/143843195

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!