利用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日

相关文章

  • C语言实现顺序表的基本操作指南(注释很详细)

    我的回答将分为以下几部分: 概述 顺序表的基本操作 示例说明 结束语 1. 概述 顺序表是一种线性表,其元素存储在一段连续的内存空间中。它的主要优点是随机访问效率高,但是在插入和删除操作时需要移动后续元素,效率较低。在实际应用中,需要根据具体的场景选择不同的数据结构。 本文将详细讲解C语言实现顺序表的基本操作。 2. 顺序表的基本操作 顺序表的基本操作包括以…

    other 2023年6月27日
    00
  • Eclipse中查看android工程代码出现”android.jar has no source attachment”的解决方案

    在Eclipse中查看Android工程代码时,有时会出现“android.jar has no source attachment”的错误提示,这种情况通常是因为我们没有安装或链接android SDK,需要安装或更新相应版本的SDK并与Eclipse链接才能进行代码查看。 下面详细介绍“Eclipse中查看android工程代码出现”android.ja…

    other 2023年6月27日
    00
  • Android百度地图实现搜索和定位及自定义图标绘制并点击时弹出泡泡

    请见以下完整攻略: Android百度地图实现搜索和定位及自定义图标绘制并点击时弹出泡泡 一、前言 Android百度地图是一款非常强大的地图工具,它集成了很多常用的地图功能,包括地图展示、搜索、定位等,也可以通过开发者的自定义需求来定制地图的样式、交互和功能。其中,本文将介绍如何在Android中使用百度地图实现搜索和定位,并自定义绘制图标并点击时弹出泡泡…

    other 2023年6月25日
    00
  • js之ActiveX控件使用说明 new ActiveXObject()

    JS中通过创建ActiveXObject对象来访问本地计算机上的COM组件,进而实现很多常规语言无法实现的操作。 前提条件 ActiveXObject只能在IE浏览器中使用 计算机上需要安装相应的COM组件 创建ActiveXObject对象 ActiveXObject()构造函数用于创建新的ActiveXObject对象。 语法: var varname …

    other 2023年6月27日
    00
  • VB6.0怎么使用文件对话框控件?

    当你需要让用户选择文件(如打开或保存文件),文件对话框控件是一个非常有用的工具。在VB6.0中,你可以通过以下步骤使用文件对话框控件: 步骤1:添加文件对话框控件 将文件对话框控件添加到你的窗体控件中。这可以通过在窗体设计器中拖动和放置文件对话框控件或直接编写代码实现。以下是一个在窗体1中添加文件对话框控件的示例代码: Private OpenFileDia…

    other 2023年6月27日
    00
  • grep-p用法

    Grep-p用法 什么是grep? Grep是一种强大的文本搜索工具,它让用户能够搜索文件中的指定文本。它是在Unix系统上最常见的工具之一,然而,在Windows上,也有类似的工具。 Grep 最初是由肯·汤普逊(Ken Thompson) 在1968年的时候创建出来的。grep的名称是”global / regular expression / prin…

    其他 2023年3月29日
    00
  • 史上最全的IDEA快捷键总结

    史上最全的IDEA快捷键总结 1. 前言 IDEA(IntelliJ IDEA)是一款功能强大的集成开发环境,提供了许多快捷键,方便开发者提高工作效率。本文将详细介绍一些常用的IDEA快捷键,并提供示例说明,帮助开发者更好地使用IDEA。 2. IDEA快捷键的分类 IDEA的快捷键可以分为以下几类: 2.1 编辑类快捷键 Ctrl + C / Cmd + …

    other 2023年6月28日
    00
  • PHP利用超级全局变量$_POST来接收表单数据的实例

    PHP利用超级全局变量$_POST来接收表单数据的实例攻略 在PHP中,可以使用超级全局变量$_POST来接收通过表单提交的数据。$_POST是一个关联数组,其中的键值对对应着表单中的输入字段名和用户输入的值。 以下是使用$_POST接收表单数据的完整攻略: 步骤1:创建HTML表单 首先,需要创建一个HTML表单,以便用户输入数据。可以使用<form…

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