Skip to content

加载中 Spin

当用户触发页面中某个交互动作,加载数据时出现,用于填补用户等待时间,从而降低用户因等待而产生的焦虑情绪。

使用场景

进入一个新页面或加载一个容器时,一次性加载完所有的内容后展示给用户。等待感显得比较强烈,超过3秒则容易使用户产生焦虑的情绪。

设计要求

  1. 图形:主体图形,推荐使用循环动画
  2. 文案:数据加载时的反馈,最多可支持扩展至10个字已满足体验需求,注意文案不需要使用“…”
  3. 位置:页面的Spin需要出现在页面当前可见区域的中央,容器的Spin需要出现在容器区域的中央

注意事项

  1. 同一个界面中,要确保加载的唯一性,不可同时使用两个,以避免造成困惑
  2. 通常情况下不建议单独使用文字进行Spin的展示

示例动画

在没有特殊需求的情况下,我们提供了一段 CSS 格式的图形动画代码示例,前端开发人员可以使用在自己的项目中。

HTML
<!DOCTYPE html>
<html lang="zh-cmn-Hans">
  <head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width,initial-scale=1.0" />
    <title>加载中 Spin</title>
    <style>
      #loading-mask {
        position: fixed;
        left: 0;
        top: 0;
        height: 100%;
        width: 100%;
        background: #fff;
        user-select: none;
        z-index: 9999;
        overflow: hidden;
      }
      .loading-wrapper {
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -100%);
      }
      .loading-dot {
        animation: antRotate 1.2s infinite linear;
        transform: rotate(45deg);
        position: relative;
        display: inline-block;
        font-size: 64px;
        width: 64px;
        height: 64px;
        box-sizing: border-box;
      }
      .loading-dot i {
        width: 22px;
        height: 22px;
        position: absolute;
        display: block;
        background-color: #00AAA6;
        border-radius: 100%;
        transform: scale(0.75);
        transform-origin: 50% 50%;
        opacity: 0.3;
        animation: antSpinMove 1s infinite linear alternate;
      }
      .loading-dot i:nth-child(1) {
        top: 0;
        left: 0;
      }
      .loading-dot i:nth-child(2) {
        top: 0;
        right: 0;
        -webkit-animation-delay: 0.4s;
        animation-delay: 0.4s;
      }
      .loading-dot i:nth-child(3) {
        right: 0;
        bottom: 0;
        -webkit-animation-delay: 0.8s;
        animation-delay: 0.8s;
      }
      .loading-dot i:nth-child(4) {
        bottom: 0;
        left: 0;
        -webkit-animation-delay: 1.2s;
        animation-delay: 1.2s;
      }
      @keyframes antRotate {
        to {
          -webkit-transform: rotate(405deg);
          transform: rotate(405deg);
        }
      }
      @-webkit-keyframes antRotate {
        to {
          -webkit-transform: rotate(405deg);
          transform: rotate(405deg);
        }
      }
      @keyframes antSpinMove {
        to {
          opacity: 1;
        }
      }
      @-webkit-keyframes antSpinMove {
        to {
          opacity: 1;
        }
      }
      /* 进度条颜色 */
      #nprogress .bar {
        background: #00aaa6 !important;
      }
      #nprogress .peg {
        box-shadow: 0 0 10px #00aaa6, 0 0 5px #00aaa6 !important;
      }
    </style>
  </head>
  <body>
    <div id="app">
      <div id="loading-mask">
        <div class="loading-wrapper">
          <span class="loading-dot loading-dot-spin"><i></i><i></i><i></i><i></i></span>
        </div>
      </div>
    </div>
  </body>
</html>