效果预览

在线演示

按下右侧的“点击预览”按钮可以在当前页面预览,点击链接可以全屏预览。

https://codepen.io/comehope/pen/ejrMKe

可交互视频

此视频是可以交互的,你可以随时暂停视频,编辑视频中的代码。

请用 chrome, safari, edge 打开观看。

https://scrimba.com/p/pEgDAM/caw7yTv

源代码下载

本地下载

每日前端实战系列的全部源代码请从 github 下载:

https://github.com/comehope/front-end-daily-challenges

代码解读

定义 dom,容器中包含 5 个元素,每个元素代表 1 个小球:

<div class="loader">
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
</div>

居中显示:

body {
margin: 0;
height: 100vh;
display: flex;
align-items: center;
justify-content: center;
background: radial-gradient(circle at center, sienna, maroon);
}

定义容器尺寸:

.loader {
width: 6em;
height: 1em;
font-size: 40px;
}

画出圆点:

.loader {
position: relative;
} .loader span {
position: absolute;
width: 1em;
height: 1em;
background-color: white;
border-radius: 50%;
left: 5em;
}

定义小球从右到左移动以及从左侧返回到右侧的动画效果:

.loader {
--duration: 5s;
} .loader span {
animation:
walk linear infinite;
animation-duration: var(--duration);
} @keyframes walk {
0%, 95%, 100% {
left: 5em;
} 80%, 85% {
left: 0;
}
}

再增加小球在最左端向上跳起和在最右端向下落下的动画效果:

.loader span {
animation:
walk linear infinite,
jump linear infinite;
} @keyframes jump {
80%, 100% {
top: 0;
} 85%, 95% {
top: -1em;
}
}

再增加小球在从左侧返回到右侧时,因运动得快而稍被压扁的效果:

.loader span {
animation:
walk linear infinite,
jump linear infinite,
squash linear infinite;
} @keyframes squash {
80%, 100% {
width: 1em;
height: 1em;
} 90% {
width: 2em;
height: 0.8em;
}
}

为 5 个小球分别定义变量:

.loader span:nth-child(1) {
--n: 1;
} .loader span:nth-child(2) {
--n: 2;
} .loader span:nth-child(3) {
--n: 3;
} .loader span:nth-child(4) {
--n: 4;
} .loader span:nth-child(5) {
--n: 5;
}

声明小球的数量:

.loader {
--dots: 5;
}

设置动画延时:

.loader span {
animation-delay: calc(var(--n) * var(--duration) / var(--dots) * -1);
}

最后,把点的尺寸改小一些:

.loader {
font-size: 20px;
}

大功告成!

原文地址:https://segmentfault.com/a/1190000015868445

最新文章

  1. BZOJ 1911: [Apio2010]特别行动队 [斜率优化DP]
  2. VSS 请求程序和 SharePoint 2013
  3. HTML中常用meta整理
  4. Django 源码小剖: 响应数据 response 的返回
  5. 转:android 录制视频的Demo
  6. CKeditor 配置使用
  7. hdu3037 Lucas定理
  8. ARM指令集----杂项指令
  9. CentOS 安装 Sun JDK
  10. Entity Framework 学习中级篇1—EF支持复杂类型的实现
  11. scrapy 修改URL爬取起始位置
  12. Web API2 使用EF Code Migrations to Seed DB
  13. 【大数据实战】将普通文本文件导入ElasticSearch
  14. test20181005 序列
  15. 如何保障Go语言基础代码质量?
  16. ibm x3550m4 开启cpu高性能模式
  17. 微软 WCF的几种寄宿方式,寄宿IIS、寄宿winform、寄宿控制台、寄宿Windows服务
  18. js switch的使用 ng-switch的使用方法
  19. console.log()的兼容性
  20. 如何在Windows下面运行hadoop的MapReduce程序

热门文章

  1. 1.检索数据 ---SQL
  2. python进阶05 常用问题库(1)json os os.path模块
  3. [Android]《Android艺术开发探索》第一章读书笔记
  4. VS2013使用EF6通过ADO.NET 连接mySql成功步骤
  5. CA、公钥、私钥 概要
  6. 使用 Kendo UI 库实现对象的继承
  7. 造成socket.error: [Errno 99] Cannot assign requested
  8. 编写xcode5插件需要增加DVTPlugInCompatibilityUUIDs
  9. python中__file__
  10. informix服务端卸载后重新安装不成功