当前位置:首页 > VUE

Vue实现滚动字幕

2026-01-19 15:07:32VUE

Vue实现滚动字幕的方法

使用CSS动画实现

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

<template>
  <div class="scroll-container">
    <div class="scroll-text" :style="{ animationDuration: duration + 's' }">
      {{ text }}
    </div>
  </div>
</template>

<script>
export default {
  props: {
    text: String,
    duration: {
      type: Number,
      default: 10
    }
  }
};
</script>

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

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

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

使用JavaScript动态计算

通过requestAnimationFrame实现更精确的滚动控制,适合需要暂停或交互的场景。

<template>
  <div class="scroll-container" ref="container">
    <div class="scroll-text" ref="text" :style="{ left: position + 'px' }">
      {{ text }}
    </div>
  </div>
</template>

<script>
export default {
  props: {
    text: String,
    speed: {
      type: Number,
      default: 1
    }
  },
  data() {
    return {
      position: 0,
      animationId: null
    };
  },
  mounted() {
    this.startScroll();
  },
  beforeDestroy() {
    cancelAnimationFrame(this.animationId);
  },
  methods: {
    startScroll() {
      const containerWidth = this.$refs.container.offsetWidth;
      const textWidth = this.$refs.text.offsetWidth;

      const animate = () => {
        this.position -= this.speed;
        if (this.position < -textWidth) {
          this.position = containerWidth;
        }
        this.animationId = requestAnimationFrame(animate);
      };
      animate();
    }
  }
};
</script>

<style>
.scroll-container {
  position: relative;
  overflow: hidden;
  white-space: nowrap;
  width: 100%;
  height: 1.2em;
}

.scroll-text {
  position: absolute;
}
</style>

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

对于复杂需求,可直接使用现成的Vue组件库简化开发。

安装依赖:

npm install vue-marquee-text-component

示例代码:

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

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

export default {
  components: { VueMarquee },
  props: {
    text: String,
    duration: {
      type: Number,
      default: 10
    },
    repeat: {
      type: Number,
      default: 4
    }
  }
};
</script>

注意事项

  • 动态内容需考虑容器宽度与文本长度的适配,避免滚动不连贯。
  • 移动端性能优化可考虑使用will-change: transform提升渲染效率。
  • 需要暂停功能时,CSS方案可通过动态添加animation-play-state: paused实现。

以上方案可根据实际需求选择,CSS动画适合简单场景,JavaScript控制更灵活,第三方库能快速实现复杂效果。

Vue实现滚动字幕

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

相关文章

Vue函数实现

Vue函数实现

在Vue中实现函数可以通过多种方式,具体取决于使用场景(选项式API、组合式API或生命周期钩子)。以下是常见方法: 方法1:选项式API中的methods 在Vue 2或选项式API中,函数通常定…

Vue怎么实现rem

Vue怎么实现rem

Vue中实现rem适配的方法 在Vue项目中实现rem适配,可以通过以下步骤完成。rem(root em)是相对于根元素(html)字体大小的单位,常用于移动端适配。 安装postcss-pxtor…

Vue实现鼠标悬浮

Vue实现鼠标悬浮

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

Vue项目实现rem

Vue项目实现rem

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

Vue如何实现扫雷

Vue如何实现扫雷

Vue 实现扫雷游戏的核心思路 扫雷游戏的核心逻辑包括生成雷区、处理点击事件、计算周围雷数以及递归展开空白区域。Vue 的响应式特性非常适合管理游戏状态和更新视图。 数据结构设计 使用二维数组表示…