评论
uni-app模企业官网交错滚动动画,附完整实现代码

uni-app模企业官网交错滚动动画,附完整实现代码

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

实现效果 

- 深色背景下的白色半透明文字滚动动画 

- 每行包含原始和阴影两种类型

- 文字内容为社会主义核心价值观相关词汇 

- 奇数行反向滚动,形成交错效果 - 无限循环的平滑滚动动画

uni-app模企业官网交错滚动动画,附完整实现代码

预览

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. 运行项目即可看到滚动动画效果

源码下载

https://www.123865.com/s/SmZtVv-Sucgh