当前位置:首页 > 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实现tab标签

vue实现tab标签

Vue 实现 Tab 标签的方法 使用动态组件和 v-for 渲染标签 通过 v-for 循环生成标签页标题,结合 v-bind:class 动态切换激活状态。使用 v-show 或动态组件 <…

vue实现共享屏幕

vue实现共享屏幕

共享屏幕的基本实现 在Vue中实现共享屏幕功能通常需要结合浏览器的getDisplayMedia API。以下是一个基础实现示例: <template> <div>…

vue单页面实现登录

vue单页面实现登录

实现登录功能的基本流程 在Vue单页面应用中实现登录功能,通常需要以下几个关键步骤: 创建登录表单组件 使用Vue的模板语法创建包含用户名和密码输入框的表单,并绑定数据到组件的data属性。 &l…

用vue实现搜索查询

用vue实现搜索查询

实现搜索查询的基本思路 在Vue中实现搜索查询功能通常涉及以下几个核心部分:数据绑定、事件监听、过滤逻辑和UI反馈。以下是一个完整的实现方案。 数据绑定与输入框 创建一个Vue组件,包含一个输入框用…

vue实现按钮组轮换

vue实现按钮组轮换

实现按钮组轮换的方法 在Vue中实现按钮组轮换效果可以通过动态绑定类和事件处理来完成。以下是一种常见的实现方式: 模板部分 <template> <div class="bu…

vue实现签约合作弹窗

vue实现签约合作弹窗

实现签约合作弹窗的步骤 使用Vue实现签约合作弹窗可以通过组件化方式完成,结合模态框和表单交互逻辑。以下是具体实现方法: 1. 创建弹窗组件 新建一个Vue组件文件(如SignContractDi…