当前位置:首页 > 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 Router实现。Vue Router是Vue.js官方的路由管理器,用于构建单页面应用(SPA)。 基本路由配置 安装Vue Router后…

js 实现vue

js 实现vue

实现 Vue 的核心功能 在 JavaScript 中实现 Vue 的核心功能需要模拟数据绑定、虚拟 DOM 和响应式系统。以下是一个简化版的实现思路: 响应式系统 通过 Object.define…

vue实现伸缩

vue实现伸缩

Vue实现伸缩功能的方法 使用CSS过渡和Vue的v-if或v-show 通过CSS的transition属性结合Vue的条件渲染指令(v-if或v-show)可以实现元素的伸缩效果。定义一个CSS类…

vue实现hexo

vue实现hexo

Vue 集成 Hexo 的实现方法 Hexo 是一个静态博客框架,而 Vue 是一个前端框架。将 Vue 集成到 Hexo 中可以通过以下方式实现: 在 Hexo 中使用 Vue 组件 通过 Hex…

简单实现vue github

简单实现vue github

实现一个简单的 Vue 项目并上传到 GitHub 创建 Vue 项目 使用 Vue CLI 快速初始化一个 Vue 项目,确保已安装 Node.js 和 npm/yarn。运行以下命令创建项目:…

vue实现路线导航

vue实现路线导航

Vue 实现路由导航的方法 在 Vue 中实现路由导航通常使用 Vue Router 库,它是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。以下是几种常见的实现方式: 安装 Vue…