最近在练习CSS3的关键帧动画(keyframes),于是做了一个简单的牛顿摆(听名字可能陌生,但你一定见过它):


先上代码(老版本IE可能存在兼容性问题):
<!DOCTYPE html>
<html lang="en"> <head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
html,
body {
height: 100%;
margin: 0px;
padding: 0px;
} .main-container {
display: flex;
justify-content: center;
align-items: center;
height: 100%;
background-color: #d7c8d0;
} .swing-container {
width: 500px;
height: 400px;
display: flex;
flex-wrap: wrap;
} .roof {
width: 100%;
height: 20px;
background-color: #18619b;
} .ball-wrapper {
flex-basis: 100px;
height: 380px;
display: flex;
align-items: center;
flex-direction: column;
} .ball {
height: 100px;
width: 100px;
text-align: center;
line-height: 90px;
border-radius: 50px;
background-color: #edcb66;
} .rope {
background: black;
width: 2px;
height: 280px;
} .left-ball.ball-wrapper {
transform-origin: center top;
animation: left-ball-swing 4s 0s infinite normal;
} .right-ball.ball-wrapper {
transform-origin: center top;
animation: right-ball-swing 4s 2s infinite normal;
} @keyframes left-ball-swing {
0% {
transform: rotate(0deg);
animation-timing-function: ease-out;
}
25% {
transform: rotate(90deg);
animation-timing-function: ease-in;
}
50% {
transform: rotate(0deg)
}
100% {}
} @keyframes right-ball-swing {
0% {
transform: rotate(0deg);
animation-timing-function: ease-out;
}
25% {
transform: rotate(-90deg);
animation-timing-function: ease-in;
}
50% {
transform: rotate(0deg)
}
100% {}
}
</style>
</head> <body>
<div class="main-container">
<div class="swing-container">
<div class="roof">
</div>
<div class="left-ball ball-wrapper">
<div class="rope"></div>
<div class="ball">快</div>
</div>
<div class="ball-wrapper">
<div class="rope"></div>
<div class="ball">点</div>
</div>
<div class="ball-wrapper">
<div class="rope"></div>
<div class="ball">去</div>
</div>
<div class="ball-wrapper">
<div class="rope"></div>
<div class="ball">看</div>
</div>
<div class="right-ball ball-wrapper">
<div class="rope"></div>
<div class="ball">书</div>
</div>
</div>
</div>
</body>
</html>
实现起来并不复杂,只需对最左和最右的小球进行关键帧动画处理,同时注意应该将绳子与小球作为一个整体,以左边小球为例:

.left-ball.ball-wrapper {
transform-origin: center top;
animation: left-ball-swing 4s 0s infinite normal;
} @keyframes left-ball-swing {
0% {
transform: rotate(0deg);
animation-timing-function: ease-out;
}
25% {
transform: rotate(90deg);
animation-timing-function: ease-in;
}
50% {
transform: rotate(0deg)
}
100% {}
}
以绳子的起点为圆心,摆动共4秒:
  0%--25%(第一秒): 顺时针旋转90度,速度为ease-out(逐渐变缓,因为动能转化为势能到了最高点速度为0)
  25%--50%(第二秒): 返回到0度,即逆时针旋转了90度,速度为ease-in,势能变为动能
  50%--100%(后两秒):不做变化(这两秒是右边小球在摆动)
That'it,最后来看效果图:

感谢阅读,o(* ̄▽ ̄*)o


原创文章,转载请注明出处。

CSS3动画实践——简易牛顿摆的更多相关文章

  1. iOS开发 ----- 加载动画之牛顿摆的实现

    牛顿摆动画 自己看动画有一段时间了,但是还是不是很能理解其中的一些属性方法之类的东西,琢磨了一下午写了一个牛顿摆的动画,这里记录一下,一遍以后查看先上图 先说下思路 说下牛顿摆的大致运动过程 根据牛顿 ...

  2. 【转】CSS3动画帧数科学计算法

    本文来源于:财付通TID 原作者:bboy90 总结都浓缩在这个工具里了,想知道工具的地址或想窥探工具诞生的趣事请往下看 . —————————————————————–     华丽丽的开篇     ...

  3. 50.纯 CSS 创作一个永动的牛顿摆

    原文地址:https://segmentfault.com/a/1190000015270808#articleHeader0 感想: 动画效果 + ::before + 2D转换 HTML code ...

  4. css3动画第一式--简单翻滚

    在w3cschool上面查阅css3的动画语法手册时,发现“css3 动画”栏目首页放了一个翻滚的div动画案例,觉得挺好看的,于是就自己模仿着写了一下,感觉还行O(∩_∩)O哈哈~ 查看原地址 下面 ...

  5. CSS3动画制作

    CSS3动画制作 rotate 绕中心旋转 fadeInPendingFadeOutUp 先渐现,停留2s,再向上滑动并逐渐消失 fadeInUp2D 向上滑动并渐现, 因Animate.css的fa ...

  6. 学习CSS3动画(animation)

    CSS3就是出了不少高大上的功能,3D效果.动画.多列等等.今天写篇文章记录怎么一下怎么用CSS3写一个动画. 丑话还得说前头,IE9以及以下版本不支持CSS3动画(如真要实现可以考虑用js,不过估计 ...

  7. 用CSS3动画,让页面动起来

    以前就听说过有个库,叫animate.css,但是自己并没有在实际项目中使用过,这次正好要做个招聘页面,得以利用一下这个库,在经常会卡顿的UC浏览器中也能流畅执行. 扫描下面的二维码,可以看到在线的d ...

  8. CSS3动画几个平时没注意的属性

    一.timing-function: steps() 一开始在使用CSS3的时候并没有太注意这个timing-function,只是注意到自定义贝塞尔曲线. 1)一个项目中的实例 先来看看左边加了st ...

  9. 用CSS3动画特效实现弹窗效果

    提示:如果大家觉得本篇实现的弹窗效果有用,可持续关注.接下会添加更多效果并且封装成插件,这样使用就方便了.效果查看: https://heavis.github.io/hidialog/index.h ...

随机推荐

  1. Python控制流程

    if  elif    else的用法 三目运算符的用法 while 和 for 两种循环 break 和 continue 的用法 条件判断 if elif else if 和 elif 后面填的判 ...

  2. [视频教程] 配置vscode的PHP自动补全提示与使用Xdebug进行远程调试debug

    默认下载安装完的vscode并不能准确提示和检测PHP的语法错误,需要手动指定一下本机的PHP程序路径.按下面的操作配置完后就能在文件保存的时候检测语法有无错误.打开文件->首选项->se ...

  3. C C++ ARM X86 函数 方法 的调用约定

    参考:https://bbs.pediy.com/thread-224583.htm 整理成表格方便查询 cdecl(C规范), stdcall(WinAPI默认), fastcall, ATPCS( ...

  4. 20.Java基础_对象的构造函数

    package pack1; public class Student { private String name; private int age; //构造方法 //如果没有任何构造函数,系统会自 ...

  5. HTTP与HTTPS初识

    HTTP HTTP是一个属于应用层的协议,特点是简介.快速   HTTP客户端发起请求,创建端口HTTP服务器在端口监听客户端请求HTTP服务器向客户端返回状态和内容 网络请求,页面渲染 1.域名解析 ...

  6. web-综合题2

    地址 http://cms.nuptzj.cn/ 0x01  很有意思的一题综合题,确实包含的内容比较多 打开页面 把能打开的都打开,能看的都看一下 几个重点的信息 一段hash e045e454c1 ...

  7. angular 运行报错

    angular 运行时报错ERROR in node_modules/rxjs/internal/types.d.ts(81,44): error TS1005: ';' expected. node ...

  8. CF-579 D. "Or" Game

    题意: 给一列数,任选一个数,乘x,最多操作k次,问最后a[1]|a[2]|...|a[n]的最大值是多少; 思路: 或运算是0|0=0,1|0=1,0|1=1,1|1=1,那么每次乘一个大于等于2的 ...

  9. IOI游记

    你竟然点进来了?那你的脑袋可能和我的一样智障QAQ. 啥也没有,闲的没事挖的坑,不要在意,没啥可读的. 权当是一个目标吧(尽管几乎不可能成真),倘若未来(无数年后),我真的站在IOI的赛场上,那我可以 ...

  10. svg描边路径动画

    svg描边路径动画<pre><!DOCTYPE html><html> <head> <meta charset="UTF-8" ...