当前位置:首页 > VUE

vue实现无缝marquee

2026-01-17 14:46:15VUE

Vue 实现无缝 Marquee 效果

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

使用 CSS 动画实现

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

<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

安装:

npm install vue-marquee-text-component

使用:

vue实现无缝marquee

<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 中实现密码框功能,可以通过原生 HTML 结合 Vue 指令或使用第三方组件库完成。以下是几种常见方案: 原生 HTML + Vue 双向绑定 <t…

vue实现handsontable

vue实现handsontable

Vue 中实现 Handsontable 要在 Vue 项目中集成 Handsontable,可以使用官方提供的 @handsontable/vue 封装库。以下是一个完整的实现步骤。 安装依赖 确…

vue实现portal

vue实现portal

Vue 实现 Portal 功能 Portal 是一种将子节点渲染到父组件 DOM 层级之外的 DOM 节点的技术,常用于实现模态框、弹出层等需要脱离当前组件层级的场景。Vue 可以通过多种方式实现…

vue多选实现

vue多选实现

Vue 多选实现方法 基础实现(v-model + multiple) 在 Vue 中实现多选可以通过 <select> 元素的 multiple 属性结合 v-model 完成。v-mo…

vue实现tap

vue实现tap

Vue 实现 Tap 事件 在移动端开发中,Tap 事件比 Click 事件更常用,因为 Click 事件有 300ms 延迟。以下是几种在 Vue 中实现 Tap 事件的方法。 使用第三方库 安装…

vue实现循环

vue实现循环

Vue 实现循环的方法 在 Vue 中,可以通过 v-for 指令实现循环渲染列表或对象。以下是几种常见的用法: 遍历数组 使用 v-for 遍历数组时,可以同时获取当前项和索引: <ul&…