博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何用纯 CSS 创作一个慧星拖尾效果的 loader 动画
阅读量:6426 次
发布时间:2019-06-23

本文共 2414 字,大约阅读时间需要 8 分钟。

img_38dec77f5f69c32fd9344e3ea37c2798.png

效果预览

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

可交互视频教程

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

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

源代码下载

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

代码解读

定义dom,设置3层容器:

<div class="loader">    <div class="face">        <div class="circle"></div>    </div></div>

居中显示:

html,body,.loader {    height: 100%;    display: flex;    align-items: center;    justify-content: center;    background-color: black;}

定义容器尺寸:

.loader {    width: 200px;    height: 200px;    position: relative;}.loader .face {    position: absolute;    width:100%;    height: 100%;    border: 2px solid white;    border-radius: 50%;}

画出半圆弧:

.loader .face {    --color: gold;    border-top-color: var(--color);    border-left-color: var(--color);}

画出弧线的端点:

.loader .face .circle {    position: absolute;    top: 50%;    left: 50%;    width: 50%;    height: 1px;    background-color: white;    transform-origin: left;    transform: rotate(-45deg);}.loader .face .circle::before {    position: absolute;    top: -5px;    right: -5px;    content: '';    background-color: var(--color);    width: 10px;    height: 10px;    border-radius: 50%;}

给端点增加光晕效果:

.loader .face .circle::before {    box-shadow: 0 0 20px var(--color),                0 0 40px var(--color),                0 0 60px var(--color),                0 0 80px var(--color),                0 0 100px var(--color),                0 0 0 5px rgba(255,255,0,0.1);}

隐藏掉辅助线:

.loader .face {    border: 2px solid transparent;}.loader .face .circle {    background-color: transparent;}

在 dom 中再增加一条弧线:

<div class="loader">    <div class="face">        <div class="circle"></div>    </div>    <div class="face">        <div class="circle"></div>    </div></div>

调整2条弧线的直径,变成同心弧:

.loader .face:nth-child(1) {    width:100%;    height: 100%;}.loader .face:nth-child(2) {    width:70%;    height: 70%;}

调整2条弧线的颜色:

.loader .face:nth-child(1) {    --color: gold;}.loader .face:nth-child(2) {    --color: lime;}

调整2条弧线的端点位置:

.loader .face:nth-child(1) {    --deg: 0deg;}.loader .face:nth-child(2) {    --deg: 180deg;}.loader .face .circle {    transform: rotate(calc(var(--deg) - 45deg));}

定义动画效果:

.loader .face {    animation: animate 3s linear infinite;}@keyframes animate{    from {        transform: rotate(0deg);    }        to {        transform: rotate(360deg);    }}

最后,让第 2 条弧线反向旋转:

.loader .face:nth-child(2) {    animation-direction: reverse;}

大功告成!

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

转载地址:http://lsfga.baihongyu.com/

你可能感兴趣的文章
Web应用程序项目 已配置为使用IIS
查看>>
ElasticSearch-倒排索引
查看>>
Algs4-2.1.18可视轨迹-选择排序
查看>>
Algs4-2.2.5自顶向下和自底向上的归并排序的子数组和大小
查看>>
ASP.NET温故而知新学习系列之ASP.NET多线程编程—.NET下的多线程编程Thread中委托的使用(六)...
查看>>
Django完整的登录示例,APP,ORM介绍和使用
查看>>
使用 Spring HATEOAS 开发 REST 服务
查看>>
最新整理知识结构图
查看>>
linux安装mysql
查看>>
flask 2 进阶
查看>>
JS 循环遍历JSON数据
查看>>
0516JS练习:综合2
查看>>
【学时总结】◆学时·VI◆ SPLAY伸展树
查看>>
extjs_1 初识
查看>>
sentences in movies and teleplays[1]
查看>>
Hive删除数据库
查看>>
使用SignalR实现页面即时刷新(服务端主动推送)
查看>>
【20181023T1】战争【反向并查集】
查看>>
Mysql的转义字符
查看>>
前端项目微金所2
查看>>