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

示例代码:

Vue实现滚动字幕

<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实现lagger页面

Vue实现lagger页面

Vue实现懒加载页面的方法 懒加载(Lazy Loading)是一种优化技术,用于延迟加载非关键资源,从而提升页面初始加载速度。在Vue中可以通过以下方式实现懒加载: 路由懒加载 使用Vue Rou…

Vue实现歌曲列表

Vue实现歌曲列表

Vue实现歌曲列表的方法 使用Vue实现歌曲列表可以通过组件化开发、数据绑定和事件处理来完成。以下是具体实现步骤: 数据准备 定义一个包含歌曲信息的数组,每个元素包含歌曲名称、歌手、时长等属性。数据…

Vue实现打印贴纸

Vue实现打印贴纸

Vue实现打印贴纸的方法 在Vue中实现打印贴纸功能,通常需要结合HTML模板、CSS样式和JavaScript打印API。以下是几种常见的方法: 使用window.print()方法 创建一个专…

Vue实现酷炫

Vue实现酷炫

Vue实现酷炫效果的方法 使用Vue.js可以轻松实现各种酷炫的交互效果和动画。以下是几种常见的实现方式: 使用Vue过渡和动画 Vue提供了内置的过渡和动画系统,可以通过<transitio…

Vue怎么实现记住我

Vue怎么实现记住我

Vue实现“记住我”功能的方法 在Vue中实现“记住我”功能通常涉及前端存储用户登录状态或凭据,常见方法包括使用浏览器的本地存储(localStorage/sessionStorage)或Cookie…

Vue 实现头条评论

Vue 实现头条评论

Vue 实现头条评论功能 数据绑定与列表渲染 使用 v-for 指令渲染评论列表,通过 v-model 绑定用户输入的评论内容。评论数据通常存储在 data 或 Vuex 中。 <templa…