【开源宝藏】30天学会CSS - DAY9 第九课 牛顿摆动量守恒动画

以下是一份逐步拆解教程,带你从零理解并复刻这个牛顿摆(Pendulum of Newton)动画效果,这是一个经典的物理演示模型,现在通过纯 HTML 和 CSS 实现出来,视觉效果炫酷、结构简洁。


🎯 动画效果说明

  • 页面中央悬挂了五根线,每根线下方挂着一个小球。
  • 最左和最右的小球依次以一定角度摆动。
  • 中间三颗球静止,模仿现实中“动量守恒”的经典效果。

🧱 第 0 步:项目结构

newton-pendulum/
├── index.html       # HTML结构
└── style.css        # 样式与动画

🔤 第 1 步:HTML 结构

index.html 中可以看到如下结构【已简化注释】:

<!DOCTYPE html>
<html lang="pt-br"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>牛顿摆</title><link rel="stylesheet" href="style.css" type="text/css" media="all"><link href="https://fonts.googleapis.com/css?family=Lato:400,700" rel="stylesheet"></head><body><div class="pendulo"><span></span><span></span><span></span><span></span><span></span></div></body>
</html>

✅ 说明

  • .pendulo 是牛顿摆的总容器。
  • 5 个 <span> 表示 5 根线,每根线下面有一个球(通过 CSS 中的 ::before 实现)。

🎨 第 2 步:页面居中 + 背景色设置

style.css 中,先看看 body.pendulo 的样式:

body {height: 100vh;display: flex;justify-content: center;align-items: center;background-color: #2c3e50; /* 深蓝背景 */
}.pendulo {display: flex;border-top: 10px solid white; /* 顶部横杆 */
}

在这里插入图片描述

关键点

  • 使用 flex 实现内容居中。
  • border-top.pendulo 看起来像是“挂球的横梁”。

⚙️ 第 3 步:定义线条和球体

.pendulo span {display: block;width: 3px;              /* 细线 */height: 300px;           /* 绳子长度 */background-color: white;margin: 0 29px;          /* 线与线之间间距 */position: relative;transform-origin: top;   /* 旋转中心为上端 */
}

在这里插入图片描述

说明

  • 每根线是一个细长的 div
  • 设置了 transform-origin: top,使动画时以顶部为旋转中心。

⚪ 第 4 步:添加球体(使用伪元素)

.pendulo span:before {content: "";position: absolute;bottom: 0;left: 0;width: 60px;height: 60px;border-radius: 50%;      /* 圆形 */background-color: white;transform: translateX(-50%);
}

在这里插入图片描述

✨ 原理

  • ::before 是挂在每根绳子底部的球。
  • width: 60px + border-radius: 50% 形成一个白色圆形。
  • transform: translateX(-50%) 让球体居中于线条正下方。

🧩 第 5 步:添加左右摆动动画

为第一个和最后一个 span 添加动画:

.pendulo span:first-child {animation: left-arm 2s ease-in infinite;
}.pendulo span:last-child {animation: right-arm 2s ease-in infinite 1s;
}

⏱️ 动画延迟

  • left-arm 动画立即开始。
  • right-arm 动画延迟 1s 开始,模拟能量从左球传递到右球的过程

🎞️ 第 6 步:定义关键帧动画

左球动画

@keyframes left-arm {0%   { transform: rotate(0deg); }25%  { transform: rotate(60deg); }50%  { transform: rotate(0deg); }100% { transform: rotate(0deg); }
}

在这里插入图片描述

右球动画

@keyframes right-arm {0%   { transform: rotate(0deg); }25%  { transform: rotate(-60deg); }50%  { transform: rotate(0deg); }100% { transform: rotate(0deg); }
}

在这里插入图片描述

💡 分析

  • 每个动画都是 2 秒一轮:
    • 0%~25%:摆动到最大角度(60° 或 -60°)。
    • 25%~50%:返回中间(静止)。
    • 50%~100%:保持不动。
  • 中间 3 个球没有动画,模拟现实中的受力后“保持静止”。

🔁 整体动画节奏

  • 每两秒一次完整循环
    • 第 1 秒:左球摆动,撞击中间球。
    • 第 2 秒:右球摆动,作为动量传递的结果。
    • 循环往复,展示真实的牛顿摆动作。

🧪 可拓展方向

  1. 颜色变化

    background-color: crimson; /* 红色球体 */
    
  2. 增加阴影或发光

    box-shadow: 0 0 10px white;
    
  3. 添加真实晃动曲线(贝塞尔曲线)

    • 使用 cubic-bezier() 替代 ease-in,可以模拟更真实物理轨迹。
  4. 交互性

    • 使用 JavaScript 添加点击触发、暂停等功能。

✅ 总结

技术点应用说明
flexbox页面元素居中
transform通过旋转实现绳子摆动
::before创建附着在元素上的球体
animation-delay控制动画交错,让左右球交替摆动
keyframes自定义动画流程,控制角度变化与节奏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/39939.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Chat2DB:一款强大的数据库管理工具,AI助力高效查询与分析

AI技术可谓是日新月异&#xff0c;其已经融入到社会的方方面面&#xff0c;今天就给大家分享一款数据库SQL客户端工具&#xff1a;Chat2DB。 1 简介 Chat2DB是一款开源的数据库管理工具&#xff0c;集成了AI 智能辅助功能&#xff0c;支持自然语言生成 SQL&#xff0c;帮助开发…

安全上网沙箱:多方面解决政企私的上网问题

在数字化的浪潮中&#xff0c;网络已成为我们工作与生活不可或缺的一部分。然而&#xff0c;网络的便捷也伴随着诸多安全隐患&#xff0c;尤其是对于企业、个人以及政企机构而言&#xff0c;安全上外网成为了至关重要的课题。 隔离保护&#xff1a;构建安全堡垒 沙箱技术在内网…

【react18】react项目使用mock模拟后台接口

前后端分离项目&#xff0c;后端还没有接口的时候&#xff0c;前端可以使用mockjs的技术实行假数据的模拟。这里使用的是mock的库msw实现这个业务. MSW msw是mock的工具&#xff0c;官网地址是在这里 使用步骤 1.安装msw npm install mswlatest --save-dev2.新建存放mock接…

2、pytest核心功能(进阶用法)

目录 1、标记&#xff08;Markers&#xff09;&#xff1a; 自定义插件 内置标记 2、夹具&#xff08;Fixtures&#xff09;&#xff1a; 夹具得用法 夹具作用域 3、钩子&#xff08;hook&#xff09;&#xff1a; 这篇是最重要的 测试文件中需要用到的 总的来说 有以下…

《TCP/IP网络编程》学习笔记 | Chapter 21:异步通知 I/O 模型

《TCP/IP网络编程》学习笔记 | Chapter 21&#xff1a;异步通知 I/O 模型 《TCP/IP网络编程》学习笔记 | Chapter 21&#xff1a;异步通知 I/O 模型同步与异步同步异步对比同步 I/O 的缺点异步 I/O 的优点 理解异步通知 I/O 模型实现异步通知 I/O 模型WSAEventSelect 函数和通知…

【2025】基于springboot+vue的医院在线问诊系统设计与实现(源码、万字文档、图文修改、调试答疑)

基于Spring Boot Vue的医院在线问诊系统设计与实现功能结构图如下&#xff1a; 课题背景 随着互联网技术的飞速发展和人们生活水平的不断提高&#xff0c;传统医疗模式面临着诸多挑战&#xff0c;如患者就医排队时间长、医疗资源分配不均、医生工作压力大等。同时&#xff0c;…

报错 standard_init_linux.go:228: exec user process caused: exec format error

docker logs 容器名 报错&#xff1a; standard_init_linux.go:228: exec user process caused: exec format error 或者 standard_init_linux.go:228: exec user process caused: input/output error 排查思路 1、检查源镜像的框架是否正确&#xff0c;是否amd64&#x…

26考研——图_图的存储(6)

408答疑 文章目录 二、图的存储图的存储相关概念邻接矩阵存储方式邻接矩阵的定义顶点的度计算邻接矩阵的特点邻接矩阵的局限性 应用场景邻接矩阵的幂次意义&#xff08;了解即可&#xff09; 邻接表存储方式邻接表定义邻接表结构邻接表的特点 邻接矩阵和邻接表的适用性差异十字…

机器学习(八)

一&#xff0c;基于协同过滤的推广算法&#xff1a; 算法原理&#xff1a; 基于用户的协同过滤(计算用户相似度→找出相似用户→根据相似用户的喜好推荐物品) 基于物品的协同过滤(计算物品相似度→找出用户喜欢的物品→推荐相似物品) 构造矩阵进行分解(将用户-物品评分矩阵分解…

云原生算力引擎:分布式推理的流体动力学

引言&#xff1a;算力黑洞的引力扰动 OpenAI推理集群日处理4.5亿次请求&#xff0c;CUDA 12.3实现μs级张量切换。特斯拉Dojo超算芯片间延迟0.5ns&#xff0c;阿里巴巴PAI平台节省58%训练时长。HuggingFace模型库下载量突破3亿次&#xff0c;AWS Inferentia芯片能效比提升8倍。…

流量分析2

一&#xff0c;webshell流量 [GKCTF 2021]签到 先看协议分级&#xff0c;大部分是tcp&#xff0c;里面有http的基于的行文本数据占了很大的比重&#xff0c;看看里面有什么 过滤http的流量 点击一条流量&#xff0c;里面的内容进去后面有基于行的文本数据&#xff0c; 先解he…

解锁智能协作:蓝耘平台如何打破应用壁垒,实现无缝联动

在当今快速发展的数字化时代&#xff0c;企业面临着越来越复杂的应用架构与系统集成挑战。传统的孤立系统已无法满足现代企业对于高效协作与数据共享的需求&#xff0c;因此&#xff0c;如何实现不同应用系统间的无缝联动&#xff0c;成为了数字化转型的关键课题。蓝耘平台作为…

3月25号

添加图片的一些例子: // 创建一个二维数组,用来管理数据int[][] data new int[4][4]; // 记录空白方块的位置int x0;int y0; // 定义一个变量,记录当前展示图片的路径String path"E:\\java\\jigsawgame\\路飞\\路飞"; // 加载图片细节: // …

单片机和微控制器知识汇总——《器件手册--单片机、数字信号处理器和可编程逻辑器件》

目录 四、单片机和微控制器 4.1 单片机(MCU/MPU/SOC) 一、定义 二、主要特点 三、工作原理 四、主要类型 五、应用领域 六、选型与设计注意事项 七、发展趋势 4.2 数字信号处理器(DSP/DSC) ​编辑​编辑 一、定义 二、工作原理 三、结构特点 四、应用领域 五、选型与设计注…

迷宫问题——(java)(bfs)

2.走迷宫 - 蓝桥云课 bfs :我的理解就是按层数便利&#xff0c;便利完一层再遍历下一层 bfs:一般用来求解权相等的最短路径和最小操作数的问题 一般使用队列来实现 1.初始化队列 先将起始节点放入队列中 2.从队列中取出一个没有访问过的节点&#xff0c;将该节点的访问状态…

Axure大屏可视化模板:赋能多领域,开启数据展示新篇章

在当今这个数据爆炸的时代&#xff0c;数据已经成为各行各业的核心资产。然而&#xff0c;如何高效、直观地展示数据&#xff0c;并将其转化为有价值的决策依据&#xff0c;成为了许多企业和组织面临的共同挑战。Axure大屏可视化模板&#xff0c;作为一款强大的数据展示工具&am…

Linux--进程控制

ok&#xff0c;我们今天学习Linux中的进程控制&#xff08;进程创建、终止、等待、替换&#xff09; 进程创建 fork函数 在linux中fork函数是⾮常重要的函数&#xff0c;它从已存在进程中创建⼀个新进程。新进程为子进程&#xff0c;⽽原进程为父进程。 #include <unist…

【开源宝藏】用 JavaScript 手写一个丝滑的打字机动画效果

你当前项目实现了一个非常丝滑的 打字机文字效果动画&#xff0c;使用的是自定义的 typical.js 脚本。下面我将给出一份逐步拆解的中文教程&#xff0c;帮你或其他初学者快速上手并自定义这个打字效果。 ✨ 最终效果 打开页面后&#xff0c;中央会逐字显示&#xff1a; Hello…

UE4学习笔记 FPS游戏制作17 让机器人持枪 销毁机器人时也销毁机器人的枪 让机器人射击

添加武器插槽 打开机器人的Idle动画&#xff0c;方便查看武器位置 在动画面板里打开骨骼树&#xff0c;找到右手的武器节点&#xff0c;右键添加一个插槽&#xff0c;重命名为RightWeapon&#xff0c;右键插槽&#xff0c;添加一个预览资产&#xff0c;选择Rifle&#xff0c;根…

气象可视化卫星云图的方式:方法与架构详解

气象卫星云图是气象预报和气候研究的重要数据来源。通过可视化技术,我们可以将卫星云图数据转化为直观的图像或动画,帮助用户更好地理解气象变化。本文将详细介绍卫星云图可视化的方法、架构和代码实现。 一、卫星云图可视化方法 1. 数据获取与预处理 卫星云图数据通常来源…