当前位置:首页 > VUE

vue实现字幕滚动

2026-02-19 06:40:19VUE

实现字幕滚动效果

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

vue实现字幕滚动

CSS动画方案

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

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 实现单选

Vue 实现单选功能 在 Vue 中实现单选功能可以通过多种方式,以下是几种常见的方法: 使用原生 <input type="radio"> 绑定 v-model 通过 v-model…

vue 实现tabs

vue 实现tabs

Vue 实现 Tabs 组件的方法 使用动态组件和 v-for 在 Vue 中实现 Tabs 可以通过动态组件和 v-for 指令结合完成。定义一个 tabs 数组,包含每个标签的标题和对应的组件。…

vue SSG实现

vue SSG实现

Vue SSG 实现方法 Vue 的静态站点生成(SSG)可以通过多种工具和框架实现,以下是几种常见的方法: 使用 VuePress VuePress 是一个基于 Vue 的静态站点生成器,适合文档…

vue怎么实现

vue怎么实现

Vue 实现方法 Vue 是一个流行的前端框架,用于构建用户界面。以下是几种常见的实现方法: 数据绑定 使用 v-model 指令实现双向数据绑定,适用于表单输入元素。 <input v-m…

vue实现建模

vue实现建模

Vue 实现建模的方法 在 Vue 中实现建模通常涉及数据绑定、组件化和状态管理。以下是几种常见的方法: 数据驱动建模 Vue 的核心是数据驱动视图。通过定义数据模型,Vue 会自动更新 DOM。例…