弹跳小球加载

效果演示

实现了一个加载动画,可以用来显示页面正在加载中的状态。具体来说,它使用了CSS的动画和变换来实现一个弹跳的圆圈和一个向右移动的线条。当页面加载完成后,这个动画会自动消失。

Code

html 复制代码
<div class="loader"></div>
css 复制代码
body {
    height: 100vh;
    display: flex;
    justify-content: center;
    align-items: center;
    background-color: #212121;
}

.loader {
    position: relative;
    width: 120px;
    height: 90px;
    margin: 0 auto;
}

.loader:before {
    content: "";
    position: absolute;
    bottom: 30px;
    left: 50px;
    height: 30px;
    width: 30px;
    border-radius: 50%;
    background: #2a9d8f;
    animation: loading-bounce 0.5s ease-in-out infinite alternate;
}

.loader:after {
    content: "";
    position: absolute;
    right: 0;
    top: 0;
    height: 7px;
    width: 45px;
    border-radius: 4px;
    box-shadow: 0 5px 0 #f2f2f2, -35px 50px 0 #f2f2f2, -70px 95px 0 #f2f2f2;
    animation: loading-step 1s ease-in-out infinite;
}

@keyframes loading-bounce {
    0% {
        transform: scale(1, 0.7);
    }

    40% {
        transform: scale(0.8, 1.2);
    }

    60% {
        transform: scale(1, 1);
    }

    100% {
        bottom: 140px;
    }
}

@keyframes loading-step {
    0% {
        box-shadow: 0 10px 0 rgba(0, 0, 0, 0),
            0 10px 0 #f2f2f2,
            -35px 50px 0 #f2f2f2,
            -70px 90px 0 #f2f2f2;
    }

    100% {
        box-shadow: 0 10px 0 #f2f2f2,
            -35px 50px 0 #f2f2f2,
            -70px 90px 0 #f2f2f2,
            -70px 90px 0 rgba(0, 0, 0, 0);
    }
}

实现思路拆分

css 复制代码
body {
  height: 100vh; /* 设置body高度为视口高度 */
  display: flex; /* 设置body元素为flex布局 */
  justify-content: center; /* 设置flex容器中内容的水平居中对齐 */
  align-items: center; /* 设置flex容器中内容的垂直居中对齐 */
  background-color: #212121; /* 设置背景颜色为深灰色 */
}

这段代码设置了页面的基本样式,包括高度、布局方式、背景颜色等。

css 复制代码
.loader {
  position: relative; /* 设置loader元素为相对定位 */
  width: 120px; /* 设置loader元素的宽度为120px */
  height: 90px; /* 设置loader元素的高度为90px */
  margin: 0 auto; /* 设置loader元素的水平居中对齐 */
}

这段代码设置了loader元素的样式,包括位置、大小、边距等。

css 复制代码
.loader:before {
  content: ""; /* 设置伪元素的内容为空 */
  position: absolute; /* 设置伪元素为绝对定位 */
  bottom: 30px; /* 设置伪元素距离底部的距离为30px */
  left: 50px; /* 设置伪元素距离左侧的距离为50px */
  height: 30px; /* 设置伪元素的高度为30px */
  width: 30px; /* 设置伪元素的宽度为30px */
  border-radius: 50%; /* 设置伪元素的圆角半径为50% */
  background: #2a9d8f; /* 设置伪元素的背景颜色为绿色 */
  animation: loading-bounce 0.5s ease-in-out infinite alternate; /* 设置伪元素的动画效果 */
}

这段代码设置了loader元素的伪元素的样式,包括位置、大小、圆角半径、背景颜色和动画效果等。

css 复制代码
.loader:after {
  content: ""; /* 设置伪元素的内容为空 */
  position: absolute; /* 设置伪元素为绝对定位 */
  right: 0; /* 设置伪元素距离右侧的距离为0 */
  top: 0; /* 设置伪元素距离顶部的距离为0 */
  height: 7px; /* 设置伪元素的高度为7px */
  width: 45px; /* 设置伪元素的宽度为45px */
  border-radius: 4px; /* 设置伪元素的圆角半径为4px */
  box-shadow: 0 5px 0 #f2f2f2, -35px 50px 0 #f2f2f2, -70px 95px 0 #f2f2f2; /* 设置伪元素的阴影效果 */
  animation: loading-step 1s ease-in-out infinite; /* 设置伪元素的动画效果 */
}

这段代码设置了loader元素的另一个伪元素的样式,包括位置、大小、圆角半径、阴影效果和动画效果等。

css 复制代码
@keyframes loading-bounce {
  0% {
    transform: scale(1, 0.7); /* 设置伪元素在动画开始时的缩放比例 */
  }

  40% {
    transform: scale(0.8, 1.2); /* 设置伪元素在动画进行到一半时的缩放比例 */
  }

  60% {
    transform: scale(1, 1); /* 设置伪元素在动画结束时的缩放比例 */
  }

  100% {
    bottom: 140px; /* 设置伪元素在动画结束后的底部距离 */
  }
}

这段代码设置了loader元素的伪元素的动画效果,包括缩放比例和底部距离等。

css 复制代码
@keyframes loading-step {
  0% {
    box-shadow: 0 10px 0 rgba(0, 0, 0, 0),
      0 10px 0 #f2f2f2,
      -35px 50px 0 #f2f2f2,
      -70px 90px 0 #f2f2f2; /* 设置伪元素在动画开始时的阴影效果 */
  }

  100% {
    box-shadow: 0 10px 0 #f2f2f2,
      -35px 50px 0 #f2f2f2,
      -70px 90px 0 #f2f2f2,
      -70px 90px 0 rgba(0, 0, 0, 0); /* 设置伪元素在动画结束时的阴影效果 */
  }
}

这段代码设置了loader元素的伪元素的动画效果,包括阴影效果。具体来说,它使用了CSS的box-shadow属性来设置伪元素的阴影效果,包括四个阴影层次,每个阴影层次的位置、颜色和模糊半径等属性。在动画开始时,伪元素的阴影效果为四个黑色半透明的阴影层次,从左上角到右下角依次变为灰色半透明的阴影层次;在动画结束时,伪元素的阴影效果为四个灰色半透明的阴影层次,从右上角到左下角依次变为黑色半透明的阴影层次。这样可以实现一个向右移动的线条的效果。

相关推荐
L耀早睡1 分钟前
mapreduce打包运行
大数据·前端·spark·mapreduce
HouGISer14 分钟前
副业小程序YUERGS,从开发到变现
前端·小程序
outstanding木槿20 分钟前
react中安装依赖时的问题 【集合】
前端·javascript·react.js·node.js
霸王蟹1 小时前
React中useState中更新是同步的还是异步的?
前端·javascript·笔记·学习·react.js·前端框架
霸王蟹1 小时前
React Hooks 必须在组件最顶层调用的原因解析
前端·javascript·笔记·学习·react.js
专注VB编程开发20年1 小时前
asp.net IHttpHandler 对分块传输编码的支持,IIs web服务器后端技术
服务器·前端·asp.net
爱分享的程序员2 小时前
全栈项目搭建指南:Nuxt.js + Node.js + MongoDB
前端
隐含2 小时前
webpack打包,把png,jpg等文件按照在src目录结构下的存储方式打包出来。解决同一命名的图片资源在打包之后,重复命名的图片就剩下一个图片了。
前端·webpack·node.js
lightYouUp3 小时前
windows系统中下载好node无法使用npm
前端·npm·node.js
Dontla3 小时前
npm cross-env工具包介绍(跨平台环境变量设置工具)
前端·npm·node.js