当前位置:首页 > VUE

vue实现公告滚动

2026-03-09 12:33:39VUE

Vue 实现公告滚动效果

公告滚动是常见的UI需求,可以通过Vue结合CSS动画或第三方库实现。以下是几种实现方式:

使用CSS动画实现垂直滚动

通过Vue数据绑定和CSS transform/animation 实现基础滚动效果:

<template>
  <div class="announcement-container">
    <div class="announcement-list" :style="{ transform: `translateY(${offset}px)` }">
      <div v-for="(item, index) in list" :key="index" class="announcement-item">
        {{ item.text }}
      </div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      list: [
        { text: "公告1:系统维护通知" },
        { text: "公告2:新功能上线" },
        { text: "公告3:节日活动预告" }
      ],
      offset: 0,
      currentIndex: 0
    }
  },
  mounted() {
    setInterval(() => {
      this.offset -= 30; // 每次移动距离
      this.currentIndex++;
      if (this.currentIndex > this.list.length - 1) {
        this.offset = 0;
        this.currentIndex = 0;
      }
    }, 2000); // 滚动间隔
  }
}
</script>

<style>
.announcement-container {
  height: 30px;
  overflow: hidden;
  position: relative;
}
.announcement-list {
  transition: transform 0.5s ease;
}
.announcement-item {
  height: 30px;
  line-height: 30px;
}
</style>

使用vue-seamless-scroll插件

专业级滚动方案,支持多种滚动模式和配置:

安装插件:

npm install vue-seamless-scroll

组件实现:

<template>
  <vue-seamless-scroll 
    :data="list" 
    :class-option="option"
    class="seamless-wrap"
  >
    <ul>
      <li v-for="(item, index) in list" :key="index">{{ item.text }}</li>
    </ul>
  </vue-seamless-scroll>
</template>

<script>
import vueSeamlessScroll from 'vue-seamless-scroll'
export default {
  components: { vueSeamlessScroll },
  data() {
    return {
      list: [
        { text: "紧急通知:服务器升级" },
        { text: "优惠活动:限时折扣" },
        { text: "版本更新:V2.0发布" }
      ]
    }
  },
  computed: {
    option() {
      return {
        direction: 1, // 0向下 1向上 2向左 3向右
        step: 0.5, // 步长
        limitMoveNum: 3, // 启动无缝滚动的数据量
        hoverStop: true, // 悬停暂停
        interval: 3000 // 滚动间隔
      }
    }
  }
}
</script>

<style>
.seamless-wrap {
  height: 30px;
  overflow: hidden;
}
</style>

使用CSS @keyframes动画

纯CSS方案,适合简单场景:

<template>
  <div class="scroll-box">
    <div class="scroll-content">
      <div v-for="(item, index) in list" :key="index">
        {{ item.text }}
      </div>
    </div>
  </div>
</template>

<style>
.scroll-box {
  height: 30px;
  overflow: hidden;
  position: relative;
}
.scroll-content {
  animation: scroll 10s linear infinite;
}
@keyframes scroll {
  0% { transform: translateY(0); }
  100% { transform: translateY(-100%); }
}
</style>

横向滚动实现

修改方向为水平滚动:

<template>
  <div class="horizontal-scroll">
    <div class="scroll-content" :style="{ transform: `translateX(${offset}px)` }">
      <span v-for="(item, index) in list" :key="index">{{ item.text }}&nbsp;&nbsp;</span>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      offset: 0,
      list: [/*...*/]
    }
  },
  mounted() {
    setInterval(() => {
      this.offset -= 2;
      if (Math.abs(this.offset) > this.$el.querySelector('.scroll-content').scrollWidth) {
        this.offset = 0;
      }
    }, 50);
  }
}
</script>

<style>
.horizontal-scroll {
  white-space: nowrap;
  overflow: hidden;
}
.scroll-content {
  display: inline-block;
  transition: transform 0.1s linear;
}
</style>

关键点总结:

vue实现公告滚动

  • 纯CSS方案适合简单需求但灵活性有限
  • JavaScript控制方案可实现精确暂停/恢复控制
  • 第三方库提供更丰富的功能和更好的性能优化
  • 注意容器高度/宽度与内容尺寸的匹配
  • 移动端需考虑触摸事件处理

标签: 公告vue
分享给朋友:

相关文章

antd vue 实现

antd vue 实现

使用 Ant Design Vue 实现功能 Ant Design Vue 是基于 Vue.js 的 UI 组件库,提供了丰富的组件和设计规范。以下是一些常见功能的实现方法。 安装 Ant Desi…

vue实现逻辑

vue实现逻辑

Vue 实现逻辑的核心概念 Vue.js 是一个渐进式 JavaScript 框架,其核心逻辑围绕数据驱动和组件化开发。通过响应式系统、虚拟 DOM 和组件生命周期等机制,Vue 实现了高效的前端开发…

vue 分页 实现

vue 分页 实现

Vue 分页实现方法 使用第三方库(如 Element UI) Element UI 提供了现成的分页组件 el-pagination,适合快速集成。 安装 Element UI: npm ins…

vue实现拖拉

vue实现拖拉

实现拖拽功能的基本步骤 在Vue中实现拖拽功能可以通过原生HTML5的拖放API或第三方库如vuedraggable完成。以下是两种方法的详细说明。 使用HTML5原生拖放API HTML5提供了原…

vue实现伸缩

vue实现伸缩

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

vue实现加载

vue实现加载

Vue 实现加载功能的方法 使用 v-if 或 v-show 控制加载状态 通过数据绑定控制加载动画的显示与隐藏。v-if 会完全移除 DOM 元素,v-show 只是切换 display 属性。…