当前位置:首页 > 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中实现播放倍速功能通常涉及HTML5的<video>元素或第三方播放器库。以下是几种常见实现方式: 使用原生HTML5 video元素 通过ref获取v…

vue实现功能

vue实现功能

Vue 功能实现方法 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。以下是实现常见功能的几种方法: 数据绑定与响应式更新 在 Vue 中,数据绑定通过 v-model…

vue实现类别

vue实现类别

Vue 实现类别的几种方法 在 Vue 中实现类别功能可以通过多种方式完成,以下是一些常见的方法: 使用 v-bind:class 动态绑定类名 通过对象语法或数组语法动态绑定类名,根据条件添加或移…

vue实现token

vue实现token

Vue 中实现 Token 认证的方法 在 Vue 中实现 Token 认证通常涉及前端与后端的交互,包括 Token 的获取、存储、发送和刷新等操作。以下是具体实现步骤: 获取 Token 用户登…

tabbar 实现 vue

tabbar 实现 vue

在 Vue 中实现 TabBar 功能可以通过多种方式完成,以下是几种常见的方法: 使用 Vue Router 结合自定义组件 创建一个自定义的 TabBar 组件,结合 Vue Router 实现…

vue实现监听

vue实现监听

监听数据变化 在Vue中,可以通过watch选项或$watch方法监听数据的变化。watch适用于组件选项内声明式监听,$watch适用于动态监听。 // 选项式API export default…