当前位置:首页 > VUE

vue 实现跑马灯

2026-01-21 01:36:39VUE

Vue 实现跑马灯效果

跑马灯效果通常指文字或内容水平滚动循环展示。以下是两种常见的实现方式:

使用 CSS 动画

通过 CSS 的 animation@keyframes 实现滚动效果:

<template>
  <div class="marquee-container">
    <div class="marquee-content">
      {{ text }}
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      text: '这里是需要滚动的文字内容,可以自定义长度和内容'
    }
  }
}
</script>

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

.marquee-content {
  display: inline-block;
  animation: marquee 10s linear infinite;
}

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

使用 JavaScript 控制

通过定时器动态修改样式实现更灵活的控制:

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

<script>
export default {
  data() {
    return {
      text: '可自定义的滚动内容',
      offset: 0,
      timer: null,
      speed: 2
    }
  },
  mounted() {
    this.startMarquee()
  },
  beforeDestroy() {
    clearInterval(this.timer)
  },
  methods: {
    startMarquee() {
      const containerWidth = this.$refs.marquee.offsetWidth
      const textWidth = this.$refs.marquee.querySelector('.marquee-text').offsetWidth

      this.timer = setInterval(() => {
        this.offset -= this.speed
        if (this.offset < -textWidth) {
          this.offset = containerWidth
        }
      }, 20)
    }
  }
}
</script>

<style>
.marquee-wrapper {
  width: 100%;
  overflow: hidden;
  position: relative;
  height: 30px;
}

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

双向滚动支持

添加方向控制参数实现左右滚动:

props: {
  direction: {
    type: String,
    default: 'left', // 'left' 或 'right'
    validator: value => ['left', 'right'].includes(value)
  }
},
methods: {
  startMarquee() {
    // ...
    this.timer = setInterval(() => {
      this.offset += this.direction === 'left' ? -this.speed : this.speed
      // ...
    }, 20)
  }
}

性能优化建议

对于频繁更新的动画,使用 requestAnimationFrame 替代 setInterval

methods: {
  startMarquee() {
    const step = () => {
      this.offset -= this.speed
      if (this.offset < -textWidth) {
        this.offset = containerWidth
      }
      this.rafId = requestAnimationFrame(step)
    }
    this.rafId = requestAnimationFrame(step)
  },
  beforeDestroy() {
    cancelAnimationFrame(this.rafId)
  }
}

以上方法可根据实际需求调整速度、方向和内容。CSS 方案简单但灵活性有限,JavaScript 方案可控性更强但代码量稍多。

vue 实现跑马灯

标签: 跑马灯vue
分享给朋友:

相关文章

vue实现冰墩墩

vue实现冰墩墩

使用 Vue 实现冰墩墩动画 通过 Vue 的动画特性和 SVG 技术,可以动态渲染冰墩墩的形象。以下是具体实现方法: 准备 SVG 素材 冰墩墩的形象通常由多个 SVG 路径组成,包括身体轮廓…

vue实现走势图

vue实现走势图

Vue 实现走势图的方法 使用 ECharts 库 ECharts 是一个强大的数据可视化库,支持多种图表类型,包括走势图(折线图)。在 Vue 项目中可以通过 vue-echarts 封装库或直接使…

vue实现点击旋转轮盘

vue实现点击旋转轮盘

实现点击旋转轮盘效果 在Vue中实现点击旋转轮盘效果,可以通过CSS动画和Vue的数据绑定结合完成。以下是一个完整的实现方案: 准备工作 需要安装Vue.js环境,可以通过CDN引入或使用Vue C…

vue实现文章锚点定位

vue实现文章锚点定位

实现文章锚点定位的方法 在Vue中实现文章锚点定位可以通过多种方式完成,以下是几种常见的方法: 使用原生HTML锚点 通过HTML的id属性和<a>标签的href属性实现锚点跳转。在V…

vue前端实现下载进度

vue前端实现下载进度

实现下载进度条的基本思路 在Vue中实现下载进度条,通常需要结合XMLHttpRequest或Fetch API来监听下载进度事件。通过计算已下载数据与总数据的比例,动态更新进度条的显示。 使用XM…

vue实现store

vue实现store

Vue 实现 Store 在 Vue 中,可以通过 Vuex 或 Pinia 实现全局状态管理(Store)。以下是两种主流方案的实现方法。 使用 Vuex 实现 Store Vuex 是 Vue…