利用svg实现带加载进度的loading

下面就来详细讲解利用SVG实现带加载进度的loading的完整攻略。

使用SVG创建loading图标

在SVG中创建loading图标,可以利用SVG的 circlepath 标签。以下示例是利用circle标签创造一个loading动画的SVG代码。

<svg viewBox="0 0 64 64">
  <circle cx="32" cy="32" r="24" fill="#fff" stroke="#000" stroke-width="4" stroke-dasharray="150 94" transform="rotate(-90, 32, 32)">
    <animateTransform attributeName="transform" type="rotate" from="0 32 32" to="360 32 32" dur="2s" repeatCount="indefinite"></animateTransform>
    <animate attributeName="stroke-dashoffset" from="1" to="-244" dur="2s" repeatCount="indefinite"></animate>
  </circle>
</svg>

这个SVG图标包含了一个圆形,圆形的边界有一个白色的填充。圆形的边界被描绘为黑色线条。该SVG图标将加载中的状态通过旋转圆形和调整描边宽度来表示。这些动画是通过加上 SVG 动画 元素来完成的。其中:

  • attributeName="transform" 表示执行旋转动画;
  • type="rotate" 表示旋转动画通过旋转整个loading图标进行;
  • from="0 32 32" 表示动画开始时旋转到指定角度,这里旋转到 0 度;
  • to="360 32 32" 表示动画结束时旋转到指定角度,这里旋转到 360 度;
  • dur="2s" 表示动画持续时间,2秒;
  • repeatCount="indefinite" 表示动画重复的次数,这里是无限次重复。

与此同时,stroke-dashoffset 属性被使用来调整描边宽度。stroke-dasharray 属性可用于定义组成描边的分隔符长度和空隙长度。这很有用,因为通过设置分隔符和空隙的长度来调整描边宽度。

利用CSS实现加载进度效果

接下来,我们将在SVG文件中实现加载进度效果。这主要通过轻微调整我们的SVG代码及添加CSS样式完成的。

以下是一个例子,展示如何定义一个具有 CSS 动画的 SVG:

<svg viewBox="0 0 512 512">
  <circle class="circle" cx="256" cy="256" r="200" />
</svg>

在这个例子中,我们的SVG代码包含一个圆形,圆心在宽和高上各一半的位置,半径为200。接下来,我们使用一个新的属性“class”指向这个SVG元素,从而使其可以调用CSS样式。

接下来,我们创建一组 CSS 样式来定义一个旋转动画以及实现加载进度的样式。下面是一个例子:

.circle {
  stroke: #fff;
  stroke-width: 5;
  fill: none;
  stroke-dasharray: 500;
  stroke-dashoffset: 500;
  animation: loading 8s cubic-bezier(0.8, 0, 0.2, 1) infinite;
}

@keyframes loading {
  from {
    stroke-dashoffset: 500;
  }
  to {
    stroke-dashoffset: 0;
  }
}

这一段CSS代码包含了三部分效果。

  • 首先,我们给我们的圆形赋予CSS类名 .circle
  • 接下来,我们给圆形设置了 stroke,用来描边,边框颜色为白色。
  • stroke-width 属性中,我们对描边宽度进行了设置,这里用了5个像素。
  • fill 属性中,我们设置为 none 表示不要进行填充操作。
  • 接下来,在 stroke-dasharray 属性中,我们设置为500。它指定了在描边周长内有多少分隔符长度和空隙长度,以使填充动画起作用。
  • stroke-dashoffset 属性同理,设置描边的偏移量。在开始时它是圆形的周长(500),但它会逐渐降到0,这样就会显示出加载进度效果。

最后,我们将所有定义的 CSS 动画样式整合在 @keyframe 中。在这里,我们定义了从500开始(表示描边),逐渐变为0的过程,从而在动画的8秒内输出进度条的效果,使用了CSS3中的 cubic-bezier 函数表现出更加自然的形变时间。

在页面上实现带加载进度的loading图标及进度条

最后,我们就可以将上述两个步骤整合在一起,最终实现一个带进度条的loading效果了。

以下是一个简单示例,展示如何在一个 HTML 页面中使用 SVG+CSS 实现带加载进度的loading图标及进度条:

<!DOCTYPE html>
<html>
<head>
  <title>SVG loading animation with progress bar</title>
  <style>
    .circle {
      stroke: #00BFFF;
      stroke-width: 1;
      fill: none;
      stroke-dasharray: 500;
      stroke-dashoffset: 500;
      animation: loading 2s cubic-bezier(0.8, 0, 0.2, 1) infinite;
    }
    .progress-ring__circle {
      animation: progress 2s ease-out forwards;
    }
    @keyframes loading {
      from {
        stroke-dashoffset: 500;
      }
      to {
        stroke-dashoffset: 0;
      }
    }
    @keyframes progress {
      0% {
        stroke-dasharray: 0 314;
      }
      100% {
        stroke-dasharray: 252 314;
      }
    }
  </style>
</head>
<body>
  <div class="load">
    <svg viewBox="0 0 64 64">
      <circle class="circle" cx="32" cy="32" r="24" />
      <circle class="progress-ring__circle" cx="32" cy="32" r="24" />
    </svg>
  </div>
  <script>
    window.onload = function(){
      document.querySelector('.load').classList.add('loaded');
    }
  </script>
</body>
</html>

在上面的示例中,我们首先在HTML文件中创建一个带有两个圆的SVG元素,两个圆分别有 circleprogress-ring__circle 的类名。

每个圆都有自己的CSS样式(分别为 .circle.progress-ring__circle),使用动画来呈现包含在SVG中的加载进度条,并在JavaScript中以显示动画完成后完成回调以等待加载过程结束。

通过整合 SVG 和 CSS,我们已经成功地实现了带进度条的 SVG loading 动画。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:利用svg实现带加载进度的loading - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • 浅谈25年Linux内核开发经历总结出来的九条经验

    浅谈25年Linux内核开发经历总结出来的九条经验 1. 深入理解Linux内核 了解Linux内核的基本原理和架构是成为一名优秀的内核开发者的第一步。深入学习内核的各个组件和子系统,包括进程管理、内存管理、文件系统等,可以帮助你更好地理解内核的工作原理和设计思想。 2. 阅读和分析内核源代码 阅读和分析内核源代码是提高内核开发技能的关键。通过仔细研究内核源…

    other 2023年7月27日
    00
  • 什么是比特币?

    比特币(Bitcoin)是一种基于去中心化区块链技术的数字货币。完整攻略包括以下几个方面: 1. 比特币的基本原理 比特币是一种去中心化的数字货币,没有中央银行或政府机构控制。它是通过使用密码学来验证和记录交易历史记录的分布式账本,称为区块链。每个区块都包含一批交易记录和上一个区块的哈希值。这种设计使得比特币独立于传统的货币和金融体系,也为用户提供了更大的安…

    其他 2023年4月19日
    00
  • centos下嵌套创建文件夹讲解

    CentOS下嵌套创建文件夹攻略 在CentOS操作系统中,可以使用mkdir命令来创建文件夹。要嵌套创建文件夹,即在已存在的文件夹中创建新的文件夹,可以通过在路径中使用斜杠(/)来实现。下面是详细的攻略: 步骤一:打开终端 首先,打开终端。在CentOS中,可以通过点击桌面上的终端图标或者使用快捷键(如Ctrl+Alt+T)来打开终端。 步骤二:进入目标文…

    other 2023年7月28日
    00
  • 详解Android系统启动过程

    下面是详解Android系统启动过程的完整攻略。 Android系统启动过程详解 Android系统的启动过程可以分为以下几个阶段: Bootloader Kernel Init进程 SystemServer进程 下面我们将逐步详细讲解每个阶段。 Bootloader 当设备电源打开时,系统首先会进入Bootloader模式。Bootloader是一个启动引…

    other 2023年6月28日
    00
  • 公开个Nday(图)

    “公开个Nday” 是一种安全研究人员使用的策略,目的是披露漏洞细节并且向厂商提供时间限制内修复的机会。以下是一个完整的“公开个Nday”的攻略。 步骤一:发现漏洞 首先,需要通过各种技术手段来寻找漏洞,例如静态分析、数据流分析、模糊测试、代码审计等。一旦发现漏洞,需要尽可能详细地记录其细节,包括漏洞类型、漏洞触发条件、漏洞危害等。 步骤二:验证漏洞 在公开…

    other 2023年6月26日
    00
  • pandasdataframe数据转为list的方法

    以下是关于“pandas DataFrame数据转为list的方法”的完整攻略: pandas简介 pandas是一款开源的数据分析库,可以用于数据清洗、数据处理、数据分析等多种数据操作。pandas提供了两种主要的数据结构:Series和DataFrame。 DataFrame数据转为list的方法 以下是将pandas DataFrame数据转为list…

    other 2023年5月9日
    00
  • Linux环境下使用GFS文件系统

    使用GFS文件系统可以实现多个计算机访问同一个文件系统的目的,对于需要高可用性和高扩展性的文件存储场景非常适用。在Linux环境下使用GFS文件系统也是可行的,下面是完整的攻略。 安装GFS文件系统 安装GFS文件系统需要先安装一些依赖库,具体可以根据不同的Linux发行版进行安装。以CentOS为例,安装步骤如下: 更新系统并安装epel-release仓…

    other 2023年6月27日
    00
  • CF游戏初始化失败怎么办?

    CF游戏初始化失败解决攻略 问题描述 CF是一款非常受欢迎的射击游戏,但是在玩家试图启动游戏时,有时会遇到游戏初始化失败的情况,导致无法进行游戏。 解决方法 方法一:检查系统环境 游戏的运行与系统环境息息相关。一般来说,CF对操作系统有一定的要求,你需要检查你的计算机是否符合以下最低要求: 操作系统:Windows XP / 7 / 8 / 10 处理器:P…

    other 2023年6月20日
    00
合作推广
合作推广
分享本页
返回顶部