当前位置:首页 > 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持续添加新弹幕。

Vue实现弹幕漂浮效果

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事件实现。

Vue实现弹幕漂浮效果

<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"
    />
  `
}

注意事项

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

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

相关文章

css3制作立体效果

css3制作立体效果

使用 transform 属性实现立体旋转 通过 transform-style: preserve-3d 和 rotateX/Y/Z 实现 3D 空间变换: .container { t…

vue弹幕实现不重叠

vue弹幕实现不重叠

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

uniapp 卡片效果

uniapp 卡片效果

uniapp 实现卡片效果的方法 使用 view 和 CSS 样式 通过 view 组件结合 CSS 样式可以快速实现卡片效果。设置圆角、阴影和边距来增强视觉层次感。 <view class…

vue实现玻璃效果

vue实现玻璃效果

实现玻璃效果的方法 在Vue中实现玻璃效果(毛玻璃或磨砂玻璃)可以通过CSS的backdrop-filter属性结合Vue的动态样式绑定来实现。以下是具体步骤: 使用CSS backdrop-fil…

h5实现弹幕

h5实现弹幕

实现弹幕的基本原理 弹幕功能的核心在于动态创建并控制多个文本元素在屏幕上移动。通过HTML5的Canvas或CSS3动画可以实现弹幕效果。Canvas适合高性能需求,CSS3动画实现更简单。 使用…

vue实现过渡效果

vue实现过渡效果

Vue 过渡效果实现方法 Vue 提供了内置的 <transition> 和 <transition-group> 组件,用于在元素或组件进入/离开 DOM 时应用过渡效果。以…