基于 Vue 和 CSS 实现的垂直滚动效果

本文档简要介绍了如何通过 Vue.jsCSS 动画 实现一个带有垂直滚动效果的组件,并通过在动画中插入停顿,模拟类似翻页的效果。

1. Vue 组件结构

1.1 模板部分 (<template>)
html 复制代码
<template>
  <div class="line1 flex">
    <div class="scroll-container">
      <div class="flex">
        <Icon name="8888" value="0000" />
        <Icon name="8888" value="0000" />
      </div>
      <div class="flex">
        <Icon name="8888" value="1111" />
        <Icon name="8888" value="1111" />
      </div>
    </div>
    <div class="scroll-container">
      <div class="flex">
        <Icon name="8888" value="0000" />
        <Icon name="8888" value="0000" />
      </div>
      <div class="flex">
        <Icon name="8888" value="1111" />
        <Icon name="8888" value="1111" />
      </div>
    </div>
  </div>
</template>

要点

  • 使用 <Icon /> 组件显示滚动内容。
  • <div class="scroll-container"> 用于包裹滚动内容,执行滚动动画。
1.2 动画设置 (<style scoped>)
css 复制代码
.line1 {
  display: flex;
  flex-direction: column; /* 垂直排列 */
  overflow: hidden;
  height: 100px; /* 设置可视区域高度 */
}

.scroll-container {
  display: flex;
  flex-direction: column; 
  animation: translateY 5s infinite linear;
}

@keyframes translateY {
  0% {
    transform: translateY(0);
  }
  40% {
    transform: translateY(0); /* 停顿 */
  }
  50% {
    transform: translateY(-50%); /* 滚动至中间 */
  }
  90% {
    transform: translateY(-50%); /* 停顿 */
  }
  100% {
    transform: translateY(-100%); /* 滚动至顶部 */
  }
}

要点

  • @keyframes translateY:定义滚动动画,使用停顿阶段(如 40% 和 90%)来模拟翻页效果。
  • animation :通过 animation: translateY 5s infinite linear; 使得容器内的内容在 5 秒内实现平滑循环的垂直滚动。

2. 核心概念

2.1 垂直滚动效果

使用 @keyframes 实现垂直滚动,控制内容从当前位置平滑滚动到顶部并重复。

2.2 停顿效果

通过在关键帧中设置相同的 transform 值(如 40%90%)来插入停顿,让滚动过程更像翻页。

2.3 Flex 布局
  • flex-direction: column;:确保内容垂直排列。
  • overflow: hidden;:隐藏超出容器范围的部分,确保内容只在设定区域内显示。
相关推荐
|晴 天|2 小时前
Vue 3 + TypeScript + Element Plus 博客系统开发总结与思考
前端·vue.js·typescript
猫3283 小时前
v-cloak
前端·javascript·vue.js
旷世奇才李先生3 小时前
Vue 3\+Vite\+Pinia实战:企业级前端项目架构设计
前端·javascript·vue.js
SoaringHeart4 小时前
Flutter进阶:用OverlayEntry 实现所有弹窗效果
前端·flutter
IT_陈寒6 小时前
Vite静态资源加载把我坑惨了
前端·人工智能·后端
herinspace6 小时前
管家婆实用贴-如何分离和附加数据库
开发语言·前端·javascript·数据库·语音识别
小码哥_常7 小时前
从MVC到MVI:一文吃透架构模式进化史
前端
嗷o嗷o7 小时前
Android BLE 的 notify 和 indicate 到底有什么区别
前端
豹哥学前端7 小时前
别再背“var 提升,let/const 不提升”了:揭开暂时性死区的真实面目
前端·面试
Lkstar7 小时前
我把Vue2响应式源码从头到尾啃了一遍,这是整理笔记
vue.js