vue实现文字向上滚动
实现文字向上滚动的 Vue 方法
使用 CSS 动画实现基础滚动
通过 CSS @keyframes 和 transform 实现垂直滚动效果,适用于静态内容。
<template>
<div class="scroll-container">
<div class="scroll-content">
<p v-for="(item, index) in items" :key="index">{{ item }}</p>
</div>
</div>
</template>
<script>
export default {
data() {
return {
items: ['内容1', '内容2', '内容3', '内容4']
}
}
}
</script>
<style>
.scroll-container {
height: 100px;
overflow: hidden;
position: relative;
}
.scroll-content {
animation: scroll 10s linear infinite;
}
@keyframes scroll {
0% { transform: translateY(0); }
100% { transform: translateY(-100%); }
}
</style>
动态数据无限循环滚动
结合 setInterval 实现动态数据更新,适合实时数据场景。

<template>
<div class="scroll-box">
<div
class="scroll-list"
:style="{ transform: `translateY(${offset}px)` }"
>
<div v-for="(item, index) in list" :key="index">{{ item.text }}</div>
<!-- 复制内容实现无缝衔接 -->
<div v-for="(item, index) in list" :key="index + '_copy'">{{ item.text }}</div>
</div>
</div>
</template>
<script>
export default {
data() {
return {
list: [
{ text: '动态内容A' },
{ text: '动态内容B' },
{ text: '动态内容C' }
],
offset: 0,
timer: null
}
},
mounted() {
this.startScroll()
},
beforeDestroy() {
clearInterval(this.timer)
},
methods: {
startScroll() {
const speed = 1 // 滚动速度
const itemHeight = 30 // 单行高度
this.timer = setInterval(() => {
this.offset -= speed
if (Math.abs(this.offset) >= this.list.length * itemHeight) {
this.offset = 0
}
}, 50)
}
}
}
</script>
<style>
.scroll-box {
height: 90px;
overflow: hidden;
}
.scroll-list {
transition: transform 0.3s linear;
}
</style>
使用第三方库 vue-seamless-scroll
对于复杂需求,可直接使用专门开发的第三方组件库。

安装依赖:
npm install vue-seamless-scroll
实现示例:
<template>
<vue-seamless-scroll
:data="list"
:class-option="options"
class="seamless-wrap"
>
<ul>
<li v-for="(item, index) in list" :key="index">{{ item }}</li>
</ul>
</vue-seamless-scroll>
</template>
<script>
import vueSeamlessScroll from 'vue-seamless-scroll'
export default {
components: { vueSeamlessScroll },
data() {
return {
list: ['数据A', '数据B', '数据C', '数据D'],
options: {
direction: 2, // 0向下 1向上 2向左 3向右
limitMoveNum: 3, // 可视区域内移动的元素数量
step: 1, // 步长
hoverStop: true // 悬停暂停
}
}
}
}
</script>
<style>
.seamless-wrap {
height: 120px;
overflow: hidden;
}
</style>
性能优化建议
- 对于大量数据采用虚拟滚动技术,只渲染可视区域内容
- 使用
will-change: transform提升 CSS 动画性能 - 动态数据场景下注意清除定时器避免内存泄漏
- 移动端考虑使用
requestAnimationFrame替代setInterval






