当前位置:首页 > VUE

vue实现无缝marquee

2026-03-30 08:03:13VUE

Vue 实现无缝 Marquee 效果

无缝 Marquee(跑马灯)效果在 Vue 中可以通过 CSS 动画或 JavaScript 动态控制实现。以下是两种常见方法:

vue实现无缝marquee

方法一:使用 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-wrapper" ref="wrapper">
    <div class="marquee-inner" :style="{ transform: `translateX(${offset}px)` }">
      <span v-for="(item, index) in 2" :key="index">{{ content }}</span>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      content: "重复内容实现无缝滚动效果 ",
      offset: 0,
      speed: 2,
      requestId: null
    };
  },
  mounted() {
    this.startAnimation();
  },
  beforeDestroy() {
    cancelAnimationFrame(this.requestId);
  },
  methods: {
    startAnimation() {
      const animate = () => {
        this.offset -= this.speed;
        if (Math.abs(this.offset) >= this.$refs.wrapper.offsetWidth) {
          this.offset = 0;
        }
        this.requestId = requestAnimationFrame(animate);
      };
      animate();
    }
  }
};
</script>

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

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

方法三:使用第三方库

安装 vue-marquee-text-component 快速实现:

npm install vue-marquee-text-component
<template>
  <marquee-text :duration="10" :repeat="Infinity">
    {{ text }}
  </marquee-text>
</template>

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

export default {
  components: { MarqueeText },
  data() {
    return {
      text: "通过第三方库快速实现跑马灯效果"
    };
  }
};
</script>

注意事项

  • 动态宽度内容需监听 resize 事件调整动画参数
  • 大量内容滚动时建议使用 will-change: transform 优化性能
  • 移动端注意兼容 requestAnimationFrame 和触摸事件冲突

以上方法可根据实际需求选择,CSS 动画适合简单场景,动态控制更灵活,第三方库能快速集成复杂功能。

标签: vuemarquee
分享给朋友:

相关文章

vue SSG实现

vue SSG实现

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

vue nexttick实现

vue nexttick实现

Vue 中 nextTick 的实现原理 Vue 的 nextTick 是一个用于在下次 DOM 更新循环结束之后执行延迟回调的方法。它的核心实现依赖于 JavaScript 的事件循环机制。 基本…

vue实现github

vue实现github

Vue 实现 GitHub 相关功能 创建 GitHub API 请求 在 Vue 项目中,可以使用 axios 或 fetch 与 GitHub API 进行交互。需要在 GitHub 上创建个人访…

vue事件实现

vue事件实现

Vue 事件实现方法 在Vue中,事件处理是通过v-on指令或@简写来实现的。以下是几种常见的事件处理方式: 使用v-on指令绑定事件 <button v-on:click="handleC…

vue工序实现

vue工序实现

Vue 工序实现方法 在Vue中实现工序(或流程)功能,通常涉及状态管理、组件通信和动态渲染。以下是几种常见方法: 使用动态组件 通过Vue的<component :is="currentCo…

vue实现绘图

vue实现绘图

Vue 实现绘图的方法 在 Vue 中实现绘图功能,可以通过多种方式实现,包括使用原生 HTML5 Canvas、第三方库(如 Fabric.js、Konva.js)或 SVG。以下是几种常见的实现方…