当前位置: 首页 > news >正文

记录一个纯CSS实现滚动驱动动画的效果

文章在个人网站中发布,原文链接:记录一个纯CSS实现滚动驱动动画的效果

先看一下这个简单的案例

代码:

你也可以直接划到下边看效果。

<div class="out-cont"><!-- 最外层元素,用于框定元素需要固定的距离 --><div class="inner-cont"><!-- 内层元素,用于固定元素的位置 --><div class="animation-item"><!-- 播放动画的元素内容 --></div></div>
</div>
<style>
.out-cont {
/* 最外层元素,用于框定元素需要固定的距离,这里表示元素将被固定两个屏幕的高度 */width: 100%;height: 200vh;position: relative;
}
.inner-cont {
/* 内层元素,用于固定元素的位置,使用sticky使元素在范围内固定 */width: 100%;height: 50vh;position: sticky;top: 25vh;display: flex;align-items: center;justify-content: center;
}
.animation-item{
/* 播放动画的元素内容,使用animation-timeline实现滚动驱动动画 */width: 20%;aspect-ratio: 1;background-color: #2E74B5;animation: move 1s linear forwards;animation-timeline: view();animation-range: contain;
}
@keyframes move {0% {transform: rotate(0deg);border-radius: 8%;}50% {transform: rotate(360deg);border-radius: 50%;}100% {border-radius: 8%;transform: rotate(720deg);}
}
</style>

效果:

.out-cont
.inner-cont
视口

sticky:粘性布局

对于前端码农来说这个玩意并不陌生,所以就只简单介绍一下:
position:sticky是介于position:relative与position:fixed之间的一种布局方式。当父元素出现在屏幕中时它表现得像fixed,会把自己固定在屏幕上。当父元素出现在屏幕外时它表现得像relative,会按照正常的文档流进行布局,被父容器带走。
关于这个案例是如何使用sticky实现类似元素固定的效果的,上面效果示例右边有一个简单的展示,可以帮助理解。而且这个展示也是纯css的哦。

sticky元素的所有父级都不能设置overflow:hidden,这样会使sicky无效,实在需要可以使用overflow:clip代替。

animation-timeline:滚动驱动动画

这是本案例的核心,元素上使用了这个属性,@keyframes定义的css动画将不会自动播放,而是根据滚动条的进度进行滚动。
这个属性有两个主要属性值:

  • animation-timeline: view()
    元素进入视口时开始播放动画,离开视口时结束。
  • animation-timeline: scroll()
    元素将在整个滚动容器中滚动时播放动画。
  • animation-timeline:cont-name
    命名容器,这个待会展开讲。
视口
view()
视口
scroll()

animation-timeline: scroll()

scroll()是对于整个页面的,相对而言比较简单,用于做一些与全局滚动相关的效果,例如文章阅读进度,这里引用前端侦探的一张图。
scroll
scroll()中可以填入两个参数:scroller和axis

  • scroller
    scroller参数用于指定滚动容器,默认值为nearest
    如果设置为nearest,将会使用最近的祖先滚动容器。
    如果设置为root,将会使用文档视口作为滚动容器。
    如果设置为self,将会使用元素本身作为滚动容器。

  • axis
    axis参数用于指定滚动轴,默认值为block
    如果设置为block,滚动容器的块级轴方向。
    如果设置为inline,滚动容器内联轴方向。
    如果设置为x,则元素将在水平方向上滚动。
    如果设置为y,则元素将在垂直方向上滚动。

animation-range

如果我不想让动画整个滚动期间都播放呢,可以使用animation-range属性设置动画的起止位置,px%单位均可。
例如:

.animation{animation-range: 0 100px;
}

这样动画就只会在滚动容器滚动到0到100px的位置时播放,在100px之后就不会再播放了。

animation-timeline:view()

view()是相对于元素与视口的位置的,这个案例就是基于view()的。
view()中也可以填入两个参数:axios和inset

  • axis
    axis参数用于指定滚动轴,默认值为block
    如果设置为block,滚动容器的块级轴方向。
    如果设置为inline,滚动容器内联轴方向。
    如果设置为x,则元素将在水平方向上滚动。
    如果设置为y,则元素将在垂直方向上滚动。

  • inset
    inset参数用于规定动画从何时开始何时结束,是元素刚冒尖尖就开始还是元素完全进入视口呢,就靠这个属性控制,有点类似于上面animation-range的作用。
    inset接受一个或两个值,两个值时代表开始位置和结束位置,px%单位均可

animation-timeline:cont-name

你可能发现了,仅靠上面那些属性,只能实现父元素滚动驱动子元素的动画,要是我需要滚动一个容器去驱动另一个兄弟元素的动画呢?就需要靠命名的容器实现了。
使用很简单,就是在滚动容器上使用一个属性scroll-timeline-name

.scroll{/* 命名滚动容器 */scroll-timeline-name: --my-scroller;
}
.animation{/* 需要被驱动动画的元素 */animation-timeline: --my-scroller;
}

这样.scroll容器被滚动时,.animation元素就会根据滚动容器的滚动进度进行动画播放。

相关知识

position:fixed
animation-timeline
animation-range
前端侦探

相关文章:

记录一个纯CSS实现滚动驱动动画的效果

使用sticky与animation-timeline实现元素固定的滚动驱动动画文章在个人网站中发布,原文链接:记录一个纯CSS实现滚动驱动动画的效果先看一下这个简单的案例 代码: 你也可以直接划到下边看效果。 <div class="out-cont"><!-- 最外层元素,用于框定元素需要…...

第一周个人作业——我

第一周个人作业——我一、自我介绍 作为一名大三的学生,我的兴趣相对杂乱,涉及从小说、影视到动画、文学,再到网络论坛等多个领域,每一个都让我感受到了不同的灵感与启发。我更享受独处的时光,喜欢通过阅读和思考充实自己。偶尔我也会玩一些联机游戏,逛逛GitHub,或者与朋…...

Apache IoTDB V1.3.5 发布|优化加密算法,优化内核稳定性,修复社区反馈问题 - 详解

Apache IoTDB V1.3.5 发布|优化加密算法,优化内核稳定性,修复社区反馈问题 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &…...

Acrobat Pro DC 2025破解版安装下载教程,附永久免费免中文破解版(稳定版安装包)

一、Acrobat Pro DC 2025软件下载 [软件名称]: Acrobat Pro DC 2025(稳定版) [软件大小]: 1.63GB [安装环境]:Win 10及以上系统 [下载链接]: (建议手机保存后到电脑端打开,下载解压无需任何密码) 夸克下载链接:https://pan.quark.cn/s/c4f8d5fb593f 二、Acrobat Pro DC 20…...

20250914

1.使用缩进 2.单行字符120个以内 3.命名清晰 4.注释简洁易懂 数学之美第8章 bool代数在搜索引擎中起到了重要作用,没有他,搜索引擎的效率无法达到快速响应。 他主要通过为每个关键字建立二进制串,然后通过and,or,not进行二进制的运算, 1为符合,0为不符合,从而进行查找。…...

25秋周总结2

总结 这周基本都在考试,总的来说相比之前有一定提升,但事实上离自己的水平上限都还差了一段距离,更别说突破上限了。在我看来,现在的我不出意外每场得把最简单的两道题做出来,但是现在的情况就是还是会存在一些时候面对很简单的题却没能做出来。虽然次数不多,但是没有做出…...

华擎、微星、华硕BIOS阵脚线序及杜邦现自制刷机线

华擎、微星、华硕BIOS阵脚线序及杜邦现自制刷机线 起因及背景 博主注意到最近的一段时间八九代志强CPU进入了主流的垃圾佬视线内,且H310、Z270、B365等主板来到了100~180元的价位,配合上E2124g这种35元的核显U可以做到400元内高性能的办公和轻度游戏主机。 缺陷:但是这套玩法…...

Ubuntu 安装 VLC

sudo apt install vlc -y...

AT_abc422_f [ABC422F] Eat and Ride 题解

AT_abc422_f [ABC422F] Eat and Ride 题解 前言 好消息:场切了。 坏消息:没开 rated。 思路 注意到数据范围非常小,考虑暴力bfs。 设 $dis_i$ 为到达第 $i$ 个点的最小燃料,$w_i$ 为到达第 $i$ 个点时耗燃料最少时的体重。 如果有一条路径到达第 $i$ 个点时已经用了 $d$ 燃…...

模拟赛 R14

R14 - T1 序列 难度:黄 / 绿 题意 给定一个长为 \(n\) 的非负整数序列 \(a\),你可以进行任意次以下的操作: 选择一个区间 \([l,r]\),然后将 \(a_l,a_{l+1},\cdots,a_r\) 都减去 \(1\)。 你希望用最小的操作次数将 \(a\) 中的所有数变成 \(0\)。在此基础上,定义一次操作 \(…...

Java并发编程(2)

ThreadLocal 1、ThreadLocal是什么ThreadLocal就是线程本地变量,若创建了一个ThreadLocal变量,那访问这个变量的每个线程都会有这个变量的本地拷贝,但多个线程操作这个变量时,实际是操作自己本地内存里的变量,可以起到线程隔离的作用,避免了线程安全问题。//创建一个Thre…...

完整教程:WebApp 的价值与实现:从浏览器架构到用户体验优化

完整教程:WebApp 的价值与实现:从浏览器架构到用户体验优化pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New"…...

Ubuntu 安装百度网盘

下载:https://pan.baidu.com/download#linux百度网盘就安装好了:...

八字喜用神起名大师 API 接口

八字喜用神起名大师 API 接口 AI/模型 基于八字命理和五行相生相克理论 十年模型积累 / 三才五格数理 姓名 / 八字命理 1. 产品功能基于传统八字命理学理论; 结合三才五格数理分析; 考虑五行相生相克关系; 提供多个候选姓名供选择; 包含详细的命理分析报告; 支持方言谐音检…...

在CentOS 7上集成cJSON库的方法

安装开发工具:使用yum包管理器安装开发工具组,以确保您拥有编译cJSON所需的所有工具,例如gcc、make、autoconf等。sudo yum groupinstall "Development Tools"获取cJSON源代码:从官方仓库克隆或下载cJSON的最新源代码。git clone https://github.com/DaveGamble/cJ…...

作业1

任务一:编码规范命名规范 变量、函数、类和文件名应该简明易懂,使用英文单词或单词缩写,并使用下划线或驼峰命名法。 变量名应该使用名词,函数名应该使用动词,类名应该使用名词或名词短语,文件名应该使用有意义的名称。 格式化规范 代码行长度应该不超过80个字符。 使用一…...

网站截图与 HTML 快照 API 接口

网站截图与 HTML 快照 API 接口 网站工具 通过网页 URL 获取站点截图与内容 网页截图 / 网页快照 网站工具 / 截图 1. 产品功能支持任意网页 URL 高质量截图,包括动态内容和 JavaScript 渲染页面; 支持全页面截图和可视区域截图两种模式; 可自定义截图尺寸、设备像素比等参数…...

深入解析:精确位置定位,AR交互助力高效作业流程​

深入解析:精确位置定位,AR交互助力高效作业流程​pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospa…...

sdjaivkdshwqeofhsoejbc dfb vnhgtbv

几餐这一块...

开篇自我介绍随笔

一、自我介绍 生活里的我,有很多让自己沉浸其中的小爱好。我喜欢练书法,看着墨汁在宣纸上晕开,一笔一划勾勒出汉字的风骨,烦躁的心总能瞬间平静;也爱绘画,无论是用水彩记录生活里的小美好,还是用素描刻画细节,都是我表达想法的方式。除此之外,追综艺、追星也是我放松的…...

第八周

Hadoop 集群的稳定运行离不开完善的监控体系,搭建涵盖集群负载监控与日志收集的监控系统,可实时掌握集群运行状态,及时发现潜在问题。在集群负载监控方面,Ganglia 是常用的分布式监控工具,能够收集并展示集群中各节点的 CPU 使用率、内存占用量、磁盘 IO 速率、网络流量等…...

Tita 项目一体化管理:驱动项目全周期高效运营的引擎

一、企业项目管理的常见痛点 (一)项目启动规划阶段 目标模糊不清:项目启动时缺乏明确可量化的目标,团队成员对项目核心价值和预期成果理解不一致,导致后续工作方向偏离。例如,某研发项目因 “提升产品竞争力” 这一模糊目标,在功能开发中反复调整方向,浪费大量资源。计…...

飞行 NED坐标系(北东地坐标系):

在NED坐标系(北东地坐标系)中,飞机的‌天向速度‌、‌东向速度‌、‌北向速度‌的关系如下: 速度定义‌北向速度‌(N):飞行器在北方向上的移动速度。 ‌东向速度‌(E):飞行器在东方向上的移动速度。 ‌天向速度‌(D):飞行器在垂直地面向上的移动速度(通常为正)。…...

windows与linux环境下网络编程

windows与linux环境进行网络编程,使用的库是不一样的, 下面主要说一下windows环境下的网络编程; 网络编程从大的方面说就是对信息的发送到接收,中间传输为物理线路的作用。网络编程最主要的工作就是在发送端把信息通过规定好的协议进行组装包,在接收端按照规定好的协议把包…...

在飞牛系统中通过docker形式部署Nginx proxy manager

在飞牛系统中通过docker形式部署Nginx proxy manager本文仅用用于记录。 目标: 分别通过以飞牛的图形化界面和docker compose实现以docker的方式部署Nginx proxy manager。 首先,管理员应当新建2个文件夹用于持久化数据存储(就是你想要留着的数据找个地方放好) 1.data 存放…...

Es索引同步异步Canal解耦方案

Es索引同步异步Canal解耦方案 首先传统的Es索引同步耦合性太高需要使用业务逻辑来同步,一旦在同步的时候服务器出现异常就用可能同步失败导致影响到其他业务,这里使用的是Canal中间件来实现异步同步索引。 简述: ​ 这里以电商项目为例,当需要添加,修改或删除商品时为了电…...

在Ubuntu上配置phpMyAdmin和WordPress环境

在Ubuntu中配置phpMyAdmin和WordPress环境需要执行一系列的步骤,包含安装LAMP(Linux, Apache, MySQL, PHP)栈,配置数据库,然后安装phpMyAdmin和WordPress。 下面是具体的配置步骤分解: 安装LAMP环境更新系统首先更新你的Ubuntu系统: sudo apt update sudo apt upgrade安装…...

“四人过河”经典问题

一、什么是“四人过河”经典问题 最早版本见于 MBA/奥数/信息学趣题: N 个人(通常 N=4)要从左岸到右岸,只有一条小船,容量至多 2 人;船划行时间 = 船上所有人中最大的那一项; 船不能空驶,每次必须有人把船划回来; 问:让所有人到达对岸的最短总时间是多少?二、通用数…...

完整教程:C#语言入门详解(18)传值、输出、引用、数组、具名、可选参数、扩展方法

完整教程:C#语言入门详解(18)传值、输出、引用、数组、具名、可选参数、扩展方法pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &q…...

DevOps On Kubernetes

OSChina在深圳举办的”源创会年终盛典”上,华为云容器服务技术总监发表了名为《DevOps On Kubernetes》的主题演讲,演讲就如何将DevOps理念与容器技术相结合,实现容器化场景下的快速交付进行介绍,并重点介绍了华为云容器服务提供的持续交付工具——容器交付流水线(Contain…...

深耕Linux系统的道与术

- [著名系统内核专家张银奎老师Boolan直播间开讲:《深耕Linux系统的道与器》\_哔哩哔哩\_bilibili](https://www.bilibili.com/video/BV1pK42187EY/?vd_source=589169a942bb977a9dbcdd5f0ea6318b) - [张银奎 | 2024全球C++及系统软件技术大会](https://www.cpp-summit.org/sp…...

Debugging via Intel DCI 小蓝盒

- [PowerPoint 演示文稿](http://advdbg.org/gdk/download/20200722-DCI_DBG_FullStack.pdf)- [使用DCI单步调试Intel CPU,调试运行在其上的UEFI代码 - 程序员大本营](https://www.pianshen.com/article/4402459283/)- [[讨论]使用Intel DCI调试12代笔记本CPU来解决安装黑苹果…...

我做了个 AI 文档阅读神器,免费开源!

为了帮助大家免受文档的折磨,我用 AI 开发了个 AI 文档助手网站,可以帮你快速读懂各种复杂的文档、还帮你管理文档。大家好,我是程序员鱼皮。开学季到了,想必很多朋友要开始收集和阅读论文,像我自己学习新技术知识也会去阅读文档,我深知阅读文档的痛苦。明明每个词拆开都…...

20250913 P11503 [NordicOI 2018] Nordic Camping

P11503 [NordicOI 2018] Nordic Camping 二分 + DS 妙题 思路 首先我们可以发现。若有一个点 \((x, y)\),则我们可以通过二分求出以 \((x, y)\) 为左上角的最大空正方形的边长(记为 \(b[i][j]\)),check 就是判断以 \((x, y)\) 为左上角的边长为 \(mid\) 的正方形是否为空,…...

Dify实战训练营(基础班)(全免费值得收藏)

Dify实战训练营(基础班)(全免费值得收藏) Dify全链路实战【图文】 【01】【2025年最新版】Dify1.5.0升级部署实战指南 【02】Dify 代码执行节点实战:手把手解锁自定义业务开发能力 【03】Dify全链路实战 :TTS 实操,三步搭建语音化工作流 【04】【2025 年最新版】Dify 实…...

C 语言的历史和版本

C 语言的历史 1972年,贝尔实验室的 Dennis Ritchie 在开发 UNIX 操作系统时设计了 C 语言。C 语言是在 B 语言的基础上设计的。 C 语言的版本 K&R C K&R C 也叫 经典 C,以《The C Programming Language》【Brain Kernighan,Dennis Ritchie】(1987)(第 1 版)作为…...

PostgreSQL 上的向量搜索实践

本文整理自 IvorySQL 2025 生态大会暨 PostgreSQL 高峰论坛的演讲分享,演讲嘉宾:高策,TensorChord CEO。引言 本文主要分享如何在 PostgreSQL 上进行向量的搜索。 PostgreSQL 有非常多的 Extension,我们可以通过 Extension 的方式去扩展 PostgreSQL 能够支持的数据类型。这…...

【数据结构——图与邻接矩阵】 - 实践

【数据结构——图与邻接矩阵】 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important…...

(读书笔记)平衡掌控者

这本书比较短,主要是国内某数值设计师的MMORpg的设计经验。 虽然大部分是mmo制作的细节,可以不用太深挖,但还是有不少“游戏共性”可以参考和学习的。 主要是第2章和第4章的内容。 下面记录一些关键点并做了一些拓展。 ---------------------------------------------------…...

带头结点的单链表删除指定位置结点

1. 功能概述 bool ListDelete(LinkList &L, int i, ElemType &e) 函数的功能是:在带头结点的单链表 L 中,删除第 i 个位置的结点,并将被删除结点的数据通过引用参数 e 带回给调用者。函数名: ListDelete,清晰表达了其功能。 返回值: bool 类型。true 表示删除成功,…...

《文字、语言与数字的奇妙联结》读后感,大公司内部编码规范,本学期编码遵守规范

《文字、语言与数字的奇妙联结》读后感 读到 “文字和语言与数学,从产生起原本就有相通性,虽一度分道扬镳,最终仍能走到一起” 时,我被这种跨领域的深层联结深深触动。 最初,文字、语言与数学或许本是 “同根生”—— 它们都发源于人类认知世界、传递经验的需求。远古时期…...

[HTTP/Spring] RestTemplate : Spring的HTTP网络请求框架

0 序java应用开发中,使用http连接,访问第三方HTTP接口,通常使用的HTTP连接请求工具为HttpClient和OKHttp。这两种HTTP连接请求工具,使用起来比较复杂,新手容易出问题。如果使用spring框架,可以使用restTemplate来进行http连接请求。restTemplate默认的连接方式是java中的…...

深入解析:Linux使用-MySQL的使用

深入解析:Linux使用-MySQL的使用pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; fo…...

博客园-我的博客-的皮肤更换

皮肤地址 GShang写的博客皮肤 最近用的这个博主写的 cnbook ,强力安利!...

Apache Commons Math3 使用指南:强大的Java数学库 - 教程

Apache Commons Math3 使用指南:强大的Java数学库 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", m…...

HarmonyOS图形处理:Canvas绘制与动画开发实战

本文将全面介绍HarmonyOS 5中Canvas组件的使用方法和动画开发技巧,通过详细的代码示例和最佳实践,帮助您掌握图形绘制和动态效果实现的核心技能。1. Canvas组件基础与核心API Canvas是HarmonyOS中用于2D图形绘制的重要组件,提供了丰富的绘图接口和灵活的动画支持。 1.1 Canv…...

应用的微服务化-容器化-CI/CD

第一阶段:需要对应用按照云原生架构进行应用的微服务化改造,容器化改造,以及对接CI/CD平台,使得应用具备云原生的特点 <1.> 微服务注册配置中心 业务系统在进行微服务化改造的过程中,会涉及微服务的注册,以便于被其他所依赖的上游服务发现,分别是Naco,Eureka和Zo…...

[转发和重定向] 的核心定义

重定向和转发 不废话: “转发” 的核心定义: 服务端内部主导跳转、客户端无感知(仅 1 次请求)、浏览器 URL 不改变,与传统 Web 开发中 “转发” 的本质逻辑完全一致,只是实现载体(Nginx 路由层 vs 上层业务框架)不同,不影响其 “转发” 的属性归属。 “重定向”核心定…...

script setup 在 Vue 3 中的核心作用及具体实现方式

​​一、核心作用​​ 1. ​​简化 Composition API 语法​​​​自动暴露顶层变量​​:无需手动通过 return 暴露属性或方法,直接声明即可被模板使用。 <script setup> const count = ref(0); // 自动暴露给模板 </script> <template><p>{{ count }…...

0voice-1.4.1-cmake

cmake介绍...