我希望在广阔的原野上向前行走,并能自由地思想。 ---玛格丽特·杜拉斯-

实现效果
- 深色背景下的白色半透明文字滚动动画
- 每行包含原始和阴影两种类型
- 文字内容为社会主义核心价值观相关词汇
- 奇数行反向滚动,形成交错效果 - 无限循环的平滑滚动动画
预览


2个样式,可在代码中自行调整


说明
模板结构
<template>
<view class="scroll-animation">
<view style="position:fixed;">
<view class="scroll-animation__row" v-for="(row, index) in rows" :key="index" :class="{ 'scroll-animation__row--invert': row.invert }">
<view class="scroll-animation__item" :class="item.type" v-for="(item, itemIndex) in row.items" :key="itemIndex">
{{ item.text }}
</view>
</view>
</view>
</view>
</template>
- 使用固定定位确保动画区域始终可见
- 循环渲染生成的行数据
- 通过条件类名控制行的滚动方向
js逻辑
<script>
export default {
data() {
return {
rows: []
}
},
created() {
this.generateRows()
},
methods: {
generateRows() {
const items = ['富强', '民主', '文明', '和谐', '爱国']
const rowCount = 16
const prefix = '✧ '
const suffix = ' ✧'
const types = ['scroll-animation__item--original', 'scroll-animation__item--shadow']
this.rows = Array.from({ length: rowCount }, (_, index) => {
const allItems = types.flatMap(type =>
items.map(text => ({
text: `${prefix}${text}${suffix}`,
type
}))
)
return {
items: allItems,
invert: index % 2 === 1
}
})
}
}
}
</script>
- 在created生命周期钩子中生成初始数据
- 使用Array.from创建指定长度的行数组
- 通过flatMap一次性生成原始和阴影文字项 - 控制奇数行反向滚动
css样式
<style scoped>
page {
background: #16171d;
}
.scroll-animation__row {
display: flex;
flex-direction: row;
flex-wrap: nowrap;
gap: 1rem;
height: 4rem;
overflow: hidden;
position: relative;
width: 100vw;
z-index: -1;
}
.scroll-animation__item {
border-radius: 8px;
color: #ffffff80;
flex-shrink: 0;
font-size: 32rpx;
font-weight: 700;
height: 80rpx;
line-height: 80rpx;
text-align: center;
text-transform: uppercase;
width: 160rpx;
}
.scroll-animation__item--original,
.scroll-animation__item--shadow {
animation-direction: forward;
animation-duration: 10s;
animation-iteration-count: infinite;
animation-name: slide-left;
animation-timing-function: linear;
}
.scroll-animation__row--invert > .scroll-animation__item--original,
.scroll-animation__row--invert > .scroll-animation__item--shadow {
animation-direction: reverse;
}
@keyframes slide-left {
0% {
transform: translateX(0);
}
100% {
transform: translateX(calc(-6 * 160rpx));
}
}
</style>
- 使用BEM命名规范确保样式的可维护性
- 设置深色背景和白色半透明文字
- 通过CSS动画实现文字的无限滚动
- 使用calc计算动画的 translateX 距离
使用说明
1. 将该页面文件添加到UniApp项目的pages目录中
2. 在pages.json中配置该页面的路由
3. 运行项目即可看到滚动动画效果