当前位置:首页 > 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实现更精确的滚动控制,适合需要暂停或交互的场景。

Vue实现滚动字幕

<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组件库简化开发。

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 注销会话。以下是几种常见的实现方式: 清除本地存储的认证信息 大多数前…

vue实现字幕

vue实现字幕

Vue 实现字幕功能 在 Vue 中实现字幕功能可以通过多种方式完成,以下是几种常见的方法: 使用动态绑定和 CSS 动画 通过 Vue 的动态数据绑定和 CSS 动画可以实现简单的字幕效果。 &…

Vue实现数据检验

Vue实现数据检验

Vue 数据校验的实现方法 在Vue中实现数据校验可以通过多种方式完成,以下是常见的几种方法: 使用Vue的内置指令 Vue提供了一些内置指令如v-model和v-bind可以结合HTML5的表单验…

h5实现一个字幕滚动条

h5实现一个字幕滚动条

实现字幕滚动条的方法 在HTML5中实现字幕滚动条可以通过CSS动画或JavaScript控制元素的移动来实现。以下是两种常见的实现方式: 使用CSS动画实现 通过CSS的@keyframes和an…

Vue实现时钟

Vue实现时钟

Vue实现时钟的方法 使用Vue实现时钟可以通过多种方式完成,以下是几种常见的实现方法: 使用Date对象和setInterval 通过JavaScript的Date对象获取当前时间,并使用setI…

Vue submit实现导出

Vue submit实现导出

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