当前位置:首页 > VUE

Vue实现弹幕漂浮效果

2026-02-09 17:08:35VUE

Vue实现弹幕漂浮效果的方法

使用CSS动画实现基础漂浮 通过CSS的@keyframes定义横向移动动画,结合Vue的v-for动态渲染弹幕元素。弹幕元素需设置position: absolute及随机生成垂直位置。

<template>
  <div class="danmu-container">
    <div 
      v-for="(item, index) in danmuList" 
      :key="index" 
      class="danmu-item"
      :style="{ top: item.top + 'px', animationDuration: item.duration + 's' }"
    >
      {{ item.text }}
    </div>
  </div>
</template>

<style>
.danmu-container {
  position: relative;
  width: 100%;
  height: 300px;
  overflow: hidden;
}
.danmu-item {
  position: absolute;
  white-space: nowrap;
  animation: move linear;
}
@keyframes move {
  from { transform: translateX(100%); }
  to { transform: translateX(-100%); }
}
</style>

动态数据绑定与随机参数 在Vue的datasetup中定义弹幕数组,通过方法随机生成垂直位置和动画时长。使用setInterval持续添加新弹幕。

export default {
  data() {
    return {
      danmuList: [],
      colors: ['#ff0000', '#00ff00', '#0000ff']
    }
  },
  methods: {
    addDanmu(text) {
      this.danmuList.push({
        text,
        top: Math.random() * 250,
        duration: 5 + Math.random() * 5,
        color: this.colors[Math.floor(Math.random() * this.colors.length)]
      })
    }
  },
  mounted() {
    setInterval(() => {
      this.addDanmu('新弹幕' + Date.now())
    }, 1000)
  }
}

优化性能与事件处理 弹幕移出屏幕后应从DOM中移除,避免内存泄漏。通过监听animationend事件实现。

<template>
  <div class="danmu-container">
    <div 
      v-for="(item, index) in danmuList" 
      :key="index" 
      class="danmu-item"
      :style="{ 
        top: item.top + 'px', 
        color: item.color,
        animationDuration: item.duration + 's' 
      }"
      @animationend="removeDanmu(index)"
    >
      {{ item.text }}
    </div>
  </div>
</template>

<script>
export default {
  methods: {
    removeDanmu(index) {
      this.danmuList.splice(index, 1)
    }
  }
}
</script>

使用第三方库增强功能 对于复杂需求可考虑使用专门库如vue-danmaku。安装后通过预设配置快速实现高级功能如暂停、速度控制等。

npm install vue-danmaku
import VueDanmaku from 'vue-danmaku'

export default {
  components: { VueDanmaku },
  template: `
    <vue-danmaku 
      :danmus="danmuList" 
      :speed="100" 
      :randomChannel="true"
    />
  `
}

注意事项

Vue实现弹幕漂浮效果

  • 弹幕数量需控制,过多会影响性能
  • 移动端需考虑触摸事件冲突
  • 内容安全过滤防止XSS攻击
  • 使用requestAnimationFrame替代setInterval可获得更平滑的动画效果

标签: 效果弹幕
分享给朋友:

相关文章

vue弹幕实现不重叠

vue弹幕实现不重叠

vue弹幕实现不重叠的方法 使用CSS定位和动态计算 通过动态计算每条弹幕的垂直位置,确保新弹幕不会与现有弹幕重叠。利用position: absolute和top属性控制每条弹幕的显示位置。 da…

vue实现对话框效果

vue实现对话框效果

Vue 对话框实现方法 使用组件化方式封装对话框 创建一个独立的对话框组件(如Dialog.vue),通过v-model控制显示隐藏: <template> <div clas…

h5如何实现vr效果

h5如何实现vr效果

使用WebXR API实现VR效果 WebXR是浏览器中实现VR/AR的核心API,支持设备姿态追踪、渲染交互等功能。需在支持WebXR的设备(如Oculus、HTC Vive)或浏览器模拟环境中运行…

vue实现效果

vue实现效果

Vue 实现常见效果的方法 数据绑定与响应式更新 Vue 的核心特性是数据绑定,通过 v-model 实现表单元素与数据的双向绑定。例如输入框与数据的实时同步: <input v-model=…

vue实现弹幕

vue实现弹幕

Vue 实现弹幕功能 弹幕功能通常包括文字在屏幕上滚动显示的效果。以下是使用 Vue 实现弹幕的几种方法: 使用 CSS 动画实现基础弹幕 创建一个 Vue 组件,利用 CSS 的 @keyfram…

js实现滚动条效果

js实现滚动条效果

实现滚动条效果的方法 使用原生JavaScript实现滚动条 通过监听滚动事件,可以动态调整滚动条的位置和样式。以下是一个基础实现示例: // 获取DOM元素 const container = d…