Loading动效实现背后的思考过程

栏目: Html · 发布时间: 6年前

内容简介:有一个制作Loading动效的需求,设计师从AE导出了动画JSON数据,但需要加载一般的波浪效果实现上都是通过每根竖线间隔

有一个制作Loading动效的需求,设计师从AE导出了动画JSON数据,但需要加载 lottie-web 才能播放,考虑到这种小动效并不是业务中的常见需求,所以我不打算引入 lottie-web ,而是直接根据动画效果自己用CSS写一个,记录动效实现的思考过程。

动效原型

Loading动效实现背后的思考过程

观察细节

  • 竖线自始至终只是高度的变化,位置上保持垂直居中,动画时长1秒;
  • 坚线有上下渐变效果;
  • 从左到右的过程具有波浪效果;
  • 动画的开始到结束是一个整体,只有最后一个竖线的动画结束之后才会开始下一轮动画;
  • 每根竖线动画结束的时间都比它前一根要晚一点;
  • 动画结束后会展示一段时间5个圆点并排停留的效果;

实现过程

1、静态样式

.loading,
.loading > span {
    position: relative;
    box-sizing: border-box;
}
.loading {
    font-size: 0;
    margin: auto;
    position: absolute;
    top: 0; left: 0; bottom: 0; right: 0;
    width: 100px;
    height: 75px;
    line-height: 75px;

}

.loading > span {
    display: inline-block;
    width: 8px;
    height: 8px;
    margin: 0 6px;
    border-radius: 4px;
    vertical-align: middle;
    background-image: linear-gradient(0deg, #00F4AA 0%, #0E85FF 100%);
}
复制代码
Loading动效实现背后的思考过程

2、实现波浪效果

一般的波浪效果实现上都是通过 animate-delay 让每根竖线延迟开始动画,但这里动画从开始到结束是一个整体,所以这里我们通过为每个竖线独立设置动画进度来实现,让它们间隔 1/5秒 的时间高度拉伸到最大,注意这里使用了缓动函数 ease ,会让过渡更自然。

.loading > span:nth-child(1) { animation: loadingAnim1 1s infinite ease; }
.loading > span:nth-child(2) { animation: loadingAnim2 1s infinite ease; }
.loading > span:nth-child(3) { animation: loadingAnim3 1s infinite ease; }
.loading > span:nth-child(4) { animation: loadingAnim4 1s infinite ease; }
.loading > span:nth-child(5) { animation: loadingAnim5 1s infinite ease; }

/*
* Animation
*/
@keyframes loadingAnim1 {
    0% { height: 10px; }
    10% { height: 75px; }
    100% { height: 10px; }
}
@keyframes loadingAnim2 {
    0% { height: 10px; }
    20% { height: 75px; }
    100% { height: 10px; }
}
@keyframes loadingAnim3 {
    0% { height: 10px; }
    30% { height: 75px; }
    100% { height: 10px; }
}
@keyframes loadingAnim4 {
    0% { height: 10px; }
    40% { height: 75px; }
    100% { height: 10px; }
}
@keyframes loadingAnim5 {
    0% { height: 10px; }
    50% { height: 75px; }
    100% { height: 10px; }
}
复制代码
Loading动效实现背后的思考过程

3、设置不同的高度

loadingAnim1 >>设置>> 10% { height: 20px; }
loadingAnim2 >>设置>> 20% { height: 38px; }
loadingAnim2 >>设置>> 30% { height: 75px; }
loadingAnim4 >>设置>> 40% { height: 38px; }
loadingAnim5 >>设置>> 50% { height: 20px; }
复制代码
Loading动效实现背后的思考过程

4、设置动画结束时间间隔

每根竖线间隔 1/5秒 的时间结束动画。

loadingAnim1 >>设置>> 60% { height: 10px; }
loadingAnim2 >>设置>> 70% { height: 10px; }
loadingAnim3 >>设置>> 80% { height: 10px; }
loadingAnim4 >>设置>> 90% { height: 10px; }
loadingAnim5 >>设置>> 100% { height: 10px; }
复制代码
Loading动效实现背后的思考过程

5、结束后的并排停留的效果

要实现这种效果,只要让所有动画结束时间提前0.1秒,这样它会保持0.1秒的静止效果。

loadingAnim1 >>设置>> 50% { height: 10px; }
loadingAnim2 >>设置>> 60% { height: 10px; }
loadingAnim3 >>设置>> 70% { height: 10px; }
loadingAnim4 >>设置>> 80% { height: 10px; }
loadingAnim5 >>设置>> 90% { height: 10px; }
复制代码

6、最终样式

.loading,
.loading > span {
    position: relative;
    box-sizing: border-box;
}
.loading {
    font-size: 0;
    margin: auto;
    position: absolute;
    top: 0; left: 0; bottom: 0; right: 0;
    width: 100px;
    height: 75px;
    line-height: 75px;

}

.loading > span {
    display: inline-block;
    width: 8px;
    height: 8px;
    margin: 0 6px;
    border-radius: 4px;
    vertical-align: middle;
    background-image: linear-gradient(0deg, #00F4AA 0%, #0E85FF 100%);
}
    
.loading > span:nth-child(1) { animation: loadingAnim1 1s infinite ease; }
.loading > span:nth-child(2) { animation: loadingAnim2 1s infinite ease; }
.loading > span:nth-child(3) { animation: loadingAnim3 1s infinite ease; }
.loading > span:nth-child(4) { animation: loadingAnim4 1s infinite ease; }
.loading > span:nth-child(5) { animation: loadingAnim5 1s infinite ease; }

/*
* Animation
*/
@keyframes loadingAnim1 {
    0% { height: 10px; }
    10% { height: 20px; }
    50% { height: 10px; }
}
@keyframes loadingAnim2 {
    0% { height: 10px; }
    20% { height: 38px; }
    60% { height: 10px; }
}
@keyframes loadingAnim3 {
    0% { height: 10px; }
    30% { height: 75px; }
    70% { height: 10px; }
}
@keyframes loadingAnim4 {
    0% { height: 10px; }
    40% { height: 38px; }
    80% { height: 10px; }
}
@keyframes loadingAnim5 {
    0% { height: 10px; }
    50% { height: 20px; }
    90% { height: 10px; }
}
复制代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

代码整洁之道

代码整洁之道

[美]Robert C. Martin / 韩磊 / 人民邮电出版社 / 2010-1-1 / 59.00元

软件质量,不但依赖于架构及项目管理,而且与代码质量紧密相关。这一点,无论是敏捷开发流派还是传统开发流派,都不得不承认。 本书提出一种观念:代码质量与其整洁度成正比。干净的代码,既在质量上较为可靠,也为后期维护、升级奠定了良好基础。作为编程领域的佼佼者,本书作者给出了一系列行之有效的整洁代码操作实践。这些实践在本书中体现为一条条规则(或称“启示”),并辅以来自现实项目的正、反两面的范例。只要遵......一起来看看 《代码整洁之道》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具