当前位置:首页 > VUE

Vue实现滚动字幕

2026-02-20 07:25:37VUE

Vue 实现滚动字幕的方法

使用 CSS 动画实现

通过 CSS 的 @keyframestransform 属性实现水平滚动效果,结合 Vue 的动态数据绑定。

<template>
  <div class="scroll-container">
    <div class="scroll-text">{{ text }}</div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      text: "这是一条需要滚动的字幕内容,可以根据需求动态替换。"
    };
  }
};
</script>

<style>
.scroll-container {
  width: 100%;
  overflow: hidden;
  white-space: nowrap;
}

.scroll-text {
  display: inline-block;
  animation: scroll 10s linear infinite;
}

@keyframes scroll {
  0% { transform: translateX(100%); }
  100% { transform: translateX(-100%); }
}
</style>

使用 Vue 动态计算位置

通过 JavaScript 动态计算位移实现更灵活的控制,适合需要暂停或交互的场景。

<template>
  <div class="scroll-container" ref="container">
    <div 
      class="scroll-text" 
      :style="{ transform: `translateX(${offset}px)` }"
    >
      {{ text }}
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      text: "动态控制的滚动字幕",
      offset: 0,
      containerWidth: 0,
      textWidth: 0,
      animationId: null
    };
  },
  mounted() {
    this.initScroll();
  },
  beforeDestroy() {
    cancelAnimationFrame(this.animationId);
  },
  methods: {
    initScroll() {
      this.containerWidth = this.$refs.container.offsetWidth;
      const textElement = this.$refs.container.querySelector('.scroll-text');
      this.textWidth = textElement.offsetWidth;
      this.animateScroll();
    },
    animateScroll() {
      this.offset -= 1;
      if (this.offset < -this.textWidth) {
        this.offset = this.containerWidth;
      }
      this.animationId = requestAnimationFrame(this.animateScroll);
    }
  }
};
</script>

<style>
.scroll-container {
  width: 100%;
  overflow: hidden;
  white-space: nowrap;
}
</style>

使用第三方库(如 vue-marquee)

对于复杂需求,可直接使用现成的 Vue 滚动组件库。

安装依赖:

npm install vue-marquee-text-component

示例代码:

Vue实现滚动字幕

<template>
  <marquee-text :duration="20" :repeat="3">
    {{ text }}
  </marquee-text>
</template>

<script>
import MarqueeText from 'vue-marquee-text-component';

export default {
  components: { MarqueeText },
  data() {
    return {
      text: "通过第三方库实现的平滑滚动效果"
    };
  }
};
</script>

注意事项

  • 内容长度不足时可能不需要滚动,需添加条件判断
  • 移动端需考虑性能优化,避免频繁重绘
  • 动态内容更新时需重置动画状态
  • 多行文本滚动需调整垂直方向的动画逻辑

标签: 字幕Vue
分享给朋友:

相关文章

Vue函数实现

Vue函数实现

Vue 函数式组件的实现 Vue 函数式组件是一种无状态、无实例的组件形式,适用于简单渲染逻辑的场景。其核心特点是性能高效,适合纯展示型需求。 定义方式 export default { fu…

Vue查看全文实现

Vue查看全文实现

Vue 查看全文实现方法 在Vue中实现查看全文功能通常涉及文本截断和展开/折叠操作,以下是几种常见实现方式: 使用CSS控制文本显示 通过CSS的text-overflow和line-clamp属…

Vue echarts实现散点图

Vue echarts实现散点图

Vue ECharts 实现散点图 安装 ECharts 在 Vue 项目中安装 ECharts 依赖: npm install echarts --save 引入 ECharts 在组件中引入 E…

Vue实现音乐列表

Vue实现音乐列表

Vue 实现音乐列表的方法 数据准备与绑定 在 Vue 中实现音乐列表,首先需要准备音乐数据。可以通过数组形式存储音乐信息,例如歌曲名称、歌手、封面图片和播放链接。数据可以存储在组件的 data 属性…

Vue submit实现导出

Vue submit实现导出

Vue 中实现导出功能的方法 在 Vue 项目中实现导出功能,通常可以通过前端生成文件或调用后端接口导出数据。以下是几种常见的实现方式: 前端生成 Excel 文件 使用 xlsx 库可以方便地在前…

Vue项目实现rem

Vue项目实现rem

Vue 项目中实现 rem 适配方案 在 Vue 项目中实现 rem 适配,主要目的是让页面元素根据屏幕尺寸自动调整大小。以下是几种常见方法: 使用 postcss-pxtorem 插件 安装 po…