当前位置:首页 > 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 实现文件树的方法 使用递归组件 递归组件是处理嵌套数据结构的理想方式。文件树通常包含文件夹和文件的嵌套结构,适合用递归组件实现。 <template> <ul>…

vue实现走势图

vue实现走势图

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

vue实现一个tab栏

vue实现一个tab栏

Vue 实现 Tab 栏 基础实现(选项式 API) <template> <div class="tab-container"> <div class="t…

vue 实现复选

vue 实现复选

Vue 实现复选功能 在 Vue 中实现复选功能可以通过多种方式完成,以下是常见的几种方法: 使用 v-model 绑定数组 通过 v-model 绑定一个数组,可以自动收集用户选择的复选框值。…

vue实现语音

vue实现语音

Vue 实现语音功能的方法 使用 Web Speech API Vue 可以结合 Web Speech API 实现语音识别和合成功能。Web Speech API 包含 SpeechRecognit…

vue 实现blog

vue 实现blog

Vue 实现博客的基本步骤 使用 Vue 实现博客可以分为前端和后端两部分,前端使用 Vue.js 框架,后端可以选择 Node.js、Python 或其他服务端语言。以下是一个基于 Vue 的博客实…