当前位置:首页 > VUE

vue实现字幕滚动

2026-02-19 06:40:19VUE

实现字幕滚动效果

在Vue中实现字幕滚动效果可以通过CSS动画或JavaScript动态控制样式完成。以下是两种常见实现方式:

CSS动画方案

使用@keyframes定义滚动动画,结合Vue的模板和样式绑定:

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

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

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

.scroll-text {
  display: inline-block;
  padding-left: 100%;
  animation: scroll linear infinite;
}

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

JavaScript动态控制方案

通过计算位移实现更灵活的控制:

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

<script>
export default {
  data() {
    return {
      offset: 0,
      requestId: null,
      speed: 1
    }
  },
  props: {
    text: String
  },
  mounted() {
    this.startScroll()
  },
  beforeDestroy() {
    cancelAnimationFrame(this.requestId)
  },
  methods: {
    startScroll() {
      const step = () => {
        this.offset -= this.speed
        if (Math.abs(this.offset) > this.$refs.wrapper.offsetWidth) {
          this.offset = 0
        }
        this.requestId = requestAnimationFrame(step)
      }
      step()
    }
  }
}
</script>

<style>
.scroll-wrapper {
  width: 100%;
  overflow: hidden;
  position: relative;
}

.scrolling-text {
  white-space: nowrap;
  position: absolute;
}
</style>

双向无限循环方案

实现更流畅的无限循环效果:

<template>
  <div class="marquee">
    <div class="track" :style="trackStyle">
      <span v-for="(item, index) in 2" :key="index">{{ text }}</span>
    </div>
  </div>
</template>

<script>
export default {
  props: {
    text: String,
    speed: {
      type: Number,
      default: 50
    }
  },
  data() {
    return {
      progress: 0
    }
  },
  computed: {
    trackStyle() {
      return {
        transform: `translateX(${this.progress}%)`,
        animationDuration: `${this.speed}s`
      }
    }
  }
}
</script>

<style>
.marquee {
  overflow: hidden;
}

.track {
  display: inline-block;
  white-space: nowrap;
  animation: scroll linear infinite;
}

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

注意事项

  1. 性能优化:对于长文本考虑使用will-change: transform提升动画性能
  2. 响应式处理:监听容器尺寸变化时可能需要重新计算动画参数
  3. 暂停控制:可通过动态添加/移除CSS类或控制JavaScript动画状态实现
  4. 移动端适配:注意触摸事件与滚动的冲突处理

以上方案可根据实际需求选择,CSS方案适合简单场景,JavaScript方案提供更精细的控制能力。

vue实现字幕滚动

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

相关文章

vue实现导航栏切图

vue实现导航栏切图

Vue 实现导航栏切图 使用 Vue Router 实现基础导航 在 Vue 项目中,可以通过 Vue Router 实现导航栏的路由切换。创建一个导航栏组件,并在其中使用 <router-li…

vue实现方法

vue实现方法

Vue 实现方法 Vue 是一种流行的前端框架,用于构建用户界面和单页应用。以下是几种常见的 Vue 实现方法: 创建 Vue 实例 通过 new Vue() 创建一个 Vue 实例,传入配置对象…

vue 路由 实现

vue 路由 实现

Vue 路由实现方法 Vue Router 是 Vue.js 的官方路由管理器,用于构建单页面应用(SPA)。以下是实现 Vue 路由的详细步骤: 安装 Vue Router 通过 npm 或 ya…

vue 实现拖拽

vue 实现拖拽

Vue 实现拖拽功能 使用 HTML5 原生拖拽 API HTML5 提供了原生的拖拽 API,可以通过 draggable 属性和相关事件实现拖拽功能。 <template> &l…

vue实现socket

vue实现socket

Vue 中实现 WebSocket 通信 在 Vue 项目中实现 WebSocket 通信可以通过原生 WebSocket API 或第三方库(如 socket.io-client)完成。以下是两种常…

vue实现动态

vue实现动态

Vue 实现动态路由的方法 在 Vue 中实现动态路由通常涉及以下几个关键步骤: 使用 Vue Router 的动态路由匹配 通过 Vue Router 的 :param 语法可以实现动态路由匹配。…