当前位置:首页 > 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 gitbook 实现

Vue gitbook 实现

Vue 与 GitBook 集成实现 将 Vue 集成到 GitBook 中可以通过插件或自定义构建流程实现,以下是具体方法: 使用 gitbook-plugin-vue 插件 安装插件到 GitB…

Vue查看全文实现

Vue查看全文实现

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

Vue实现鼠标悬浮

Vue实现鼠标悬浮

鼠标悬浮效果实现方法 在Vue中实现鼠标悬浮效果可以通过多种方式完成,以下是几种常见方法: 使用v-on指令绑定事件 通过@mouseenter和@mouseleave事件可以实现悬浮效果 <…

Vue拖拽怎么实现

Vue拖拽怎么实现

Vue拖拽实现方法 使用Vue实现拖拽功能可以通过原生HTML5的拖拽API或第三方库如vuedraggable来实现。以下是两种常见的方法: 使用HTML5拖拽API HTML5提供了原生的拖拽A…

Vue实现整体缩小

Vue实现整体缩小

Vue实现整体缩放的常见方法 使用CSS transform属性 在Vue组件的样式中添加transform属性可以实现整体缩放效果。这种方法不会影响页面布局,仅改变视觉呈现。 .scale-con…

Vue实现移动端上滑动

Vue实现移动端上滑动

Vue 实现移动端滑动功能 使用 touch 事件实现滑动 监听 touchstart、touchmove 和 touchend 事件来实现滑动效果。通过计算触摸点的位移来判断滑动方向和距离。 &l…