当前位置:首页 > VUE

vue实现无缝marquee

2026-01-17 14:46:15VUE

Vue 实现无缝 Marquee 效果

无缝 Marquee(跑马灯)效果可以通过 CSS 动画或 JavaScript 动态计算位置来实现。以下是几种常见的实现方式:

使用 CSS 动画实现

通过 CSS @keyframestransform 实现无缝滚动,适用于简单的文本或元素。

vue实现无缝marquee

<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>

动态复制内容实现无缝效果

通过复制内容并动态计算位置,确保无缝衔接。

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

<script>
export default {
  data() {
    return {
      text: "无缝滚动内容 ",
      offset: 0,
      animationId: null
    };
  },
  mounted() {
    this.startAnimation();
  },
  beforeDestroy() {
    cancelAnimationFrame(this.animationId);
  },
  methods: {
    startAnimation() {
      const step = () => {
        this.offset -= 1;
        if (Math.abs(this.offset) >= this.$refs.container.scrollWidth / 2) {
          this.offset = 0;
        }
        this.animationId = requestAnimationFrame(step);
      };
      step();
    }
  }
};
</script>

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

.marquee-content {
  display: inline-block;
}
</style>

使用第三方库 vue-marquee-text-component

对于更复杂的需求,可以使用现成的 Vue 组件库,如 vue-marquee-text-component

vue实现无缝marquee

安装:

npm install vue-marquee-text-component

使用:

<template>
  <marquee-text :duration="5" :repeat="Infinity">
    这是一段无缝滚动的文本内容。
  </marquee-text>
</template>

<script>
import MarqueeText from 'vue-marquee-text-component';

export default {
  components: {
    MarqueeText
  }
};
</script>

注意事项

  • 动态计算的方式性能更好,适合内容长度不固定的场景。
  • CSS 动画简单但可能在某些浏览器中存在兼容性问题。
  • 第三方库提供了更多配置选项(如速度、方向、暂停等),适合快速开发。

标签: vuemarquee
分享给朋友:

相关文章

vue实现菜单

vue实现菜单

Vue 实现菜单的方法 在 Vue 中实现菜单功能可以通过多种方式完成,以下是几种常见的方法: 使用 v-for 动态生成菜单项 通过数据驱动的方式,利用 v-for 指令动态渲染菜单项。定义一个…

vue实现好评弹框

vue实现好评弹框

Vue 实现好评弹框的方法 使用 Vue 实现好评弹框可以通过组件化方式完成,结合动态数据绑定和事件处理。以下是具体实现步骤: 1. 创建弹框组件 新建一个 RatingDialog.vue 组件…

前端多线程实现vue

前端多线程实现vue

前端多线程与Vue的结合 在Vue中实现多线程通常通过Web Worker技术完成。Web Worker允许在后台线程中运行脚本,避免阻塞主线程,适合处理计算密集型任务。 使用Web Worker…

vue如何实现到期提醒

vue如何实现到期提醒

实现 Vue 到期提醒功能 使用计算属性计算剩余时间 在 Vue 组件中定义一个计算属性,计算目标日期与当前日期的差值。通过 Date 对象获取时间戳并计算剩余天数或小时数。 computed: {…

vue实现展开与收起

vue实现展开与收起

Vue 实现展开与收起功能 在 Vue 中实现展开与收起功能可以通过多种方式完成,以下是一些常见的方法: 使用 v-show 或 v-if 控制显示 通过 Vue 的指令 v-show 或 v-i…

vue穿梭框组件实现

vue穿梭框组件实现

实现基础穿梭框组件 在Vue中实现穿梭框组件,可以使用<el-transfer>(Element UI)或手动实现。以下是手动实现的核心逻辑: <template> &l…