当前位置:首页 > 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登录业务的实现

vue登录业务的实现

实现登录业务的基本流程 在Vue中实现登录业务通常涉及前端界面设计、表单验证、API请求交互、状态管理以及路由控制等环节。以下是核心实现步骤: 登录表单设计与验证 创建包含用户名和密码输入框的登录组…

vue实现截图

vue实现截图

Vue 实现截图的方法 使用 html2canvas 库 安装 html2canvas 库: npm install html2canvas 在 Vue 组件中使用: import html2ca…

vue 实现直播

vue 实现直播

Vue 实现直播的基本方法 在Vue中实现直播功能,通常需要结合WebRTC、RTMP或HLS等技术。以下是几种常见的实现方式: 使用WebRTC实现实时直播 WebRTC适合低延迟的实时直播场景,…

vue实现骰子

vue实现骰子

Vue 实现骰子功能 创建 Vue 组件 在 Vue 项目中创建一个骰子组件,例如 Dice.vue。该组件包含骰子的外观和逻辑。 <template> <div class=…

vue 实现打印

vue 实现打印

Vue 实现打印功能的方法 在Vue项目中实现打印功能,可以通过以下几种方式实现: 使用window.print()方法 通过调用浏览器的原生打印API实现基础打印功能,适用于简单内容打印。 //…

vue 实现排序

vue 实现排序

Vue 实现排序的方法 使用计算属性实现排序 通过计算属性对数组进行排序,可以保持原始数据不变。示例代码展示了如何对列表按名称升序排序: <template> <div>…