如何用svg写一个环形进度条以及动画(代码片段)

songbw songbw     2022-12-14     419

关键词:

本次案例主要使用了svg的三个元素,分别为circletextpath,关于svg的介绍大家可以看MDN上的相关教程,传送门


由于svg可以写到HTML中,所以这里我们就可以很方便的做进度条加载动画啦,这次案例以vue来做数据交互

svg的viewBox

viewBox属性定义了画布上可以显示的区域,viewBox有4个值,值1为svg窗口起点显示的x坐标,值2位svg窗口起点的y坐标, 后面的两个分别为显示的大小; 平常可以通过后面这两个值对svg图形进行放大和缩小, 前面的两个值进行窗口位置的变换

在demo中为了方便计算svg元素的中心,我设置为(0, 0) 即圆的坐标方程满足 x^2 + y^2 = r^2

circle元素

circle元素在svg中可以画一个圆,主要属性为cx(圆心x坐标)、cy(圆心y左边)、r(圆的半径)

text元素

svg中显示字体的元素,text-anchor、dominant-baseline分别可以设置字体的左右、上线对齐方式

path元素

svg中所有的基本元素都可以通过path路径画出来,该元素只有一个属性d,动画的效果就是通过不断改变d的值来达到的;
在这里只需要掌握d的A命令即可,传送门


效果图以及代码

技术图片


<div id="app">
    <svg width="100" height="100" viewBox="-50 -50 100 100">
        <circle cx="0" cy="0" stroke-width="6" fill="none" stroke="#ddd" :r="r"/>
        <path :d="d" fill="none" stroke-width="6" stroke="#369"/>
        <text text-anchor="middle" dominant-baseline="middle"> ratio %</text>
    </svg>
</div>


new Vue(
  el: '#app',
  data: 
    ratio: 1,
    r: 47
  ,
  computed: 
    d() 
      const  ratio  = this
      return this.getD(ratio)
    
  ,
  methods: 
    getD(ratio) 
      if (ratio >= 100) 
        ratio  = 99.999
      
      const angle = Math.PI / 50 * ratio
      const r = this.r
      const x = r * Math.cos(angle)
      const y = -r * Math.sin(angle)
      const isBigAngle = Number(ratio > 50)
      return `M 47 0 A 47 47 0 $isBigAngle 0 $x $y`
    
  ,
  mounted() 
    let timer = setInterval(() => 
      if (this.ratio > 100) 
        this.ratio = 100
        clearInterval(timer)
        timer = null
        return
      
      this.ratio += 1
    , 16)
  
)

ps:第一次写博客,发现表达能力真的好差;

环形进度条组件(代码片段)

<template><divclass="content"ref="box"><svg:id="idStr"style="transform:rotate(-90deg)":width="width":height="width 查看详情

svg的圆形进度条(代码片段)

 目前发现svg实现一些动画效果是比较高效简单的。如圆形进度条,只要会stroke-dasharray与stroke-dashoffset属性基本就可以实现,而且美观。<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Document</title 查看详情

css如何用css动画svg的填充颜色?(代码片段)

查看详情

环形进度条组件(代码片段)

<template><divclass="content"ref="box"><svg:id="idStr"style="transform:rotate(-90deg)":width="width":height="width"xmlns="http://www.w3.org/2000/svg"><linearGradient:id="`gradient-$id... 查看详情

用初中数学知识撸一个canvas环形进度条(代码片段)

...条组件vue-awesome-progress。近日被设计小姐姐要求实现这么一个环形进度条效果,大体由四部分组成,分别是底色圆环,进度弧,环内文字,进度圆点。设计稿截图如下:我的第一反应还是找现成的组件,市面上很多组件都实现了... 查看详情

如何用matlab为小姐姐跳舞视频增添另一个小姐姐跳舞进度条(代码片段)

注:本人非常清楚这项任务使用pr会简单很多,此篇文章只是为了探究matlab能干啥的边界。并作为一个熟悉matlab矩阵操作和视频音频操作的例子。效果如下:(怕侵权就只放个动图)可以看到小姐姐的舞蹈非常... 查看详情

如何用matlab为小姐姐跳舞视频增添另一个小姐姐跳舞进度条(代码片段)

注:本人非常清楚这项任务使用pr会简单很多,此篇文章只是为了探究matlab能干啥的边界。并作为一个熟悉matlab矩阵操作和视频音频操作的例子。效果如下:(怕侵权就只放个动图)可以看到小姐姐的舞蹈非常... 查看详情

如何用jquery制作进度条?

】如何用jquery制作进度条?【英文标题】:howtomakeaprogressbarwithjquery?【发布时间】:2012-02-0713:34:48【问题描述】:我想知道如何将其制作为简单的代码。我在一个网站上找到了一些我想用于我正在开发的网站的东西。问题是我试... 查看详情

csssvg环形进度条-5(代码片段)

查看详情

htmlsvg环形进度条-7(代码片段)

查看详情

csssvg环形进度条-3。(代码片段)

查看详情

htmlsvg环形进度条-4(代码片段)

查看详情

htmlsvg环形进度条-2(代码片段)

查看详情

htmlsvg环形进度条-1(代码片段)

查看详情

如何用jquery显示进度条?(代码片段)

只是告诉用户您的请求正在处理中。编辑:我发现自己是一个形象。(来源:maishudi.com)如何在整页的中心显示它?答案ProgressbarjQueryprogressbarProgressBars&Controls另一答案http://plugins.jquery.com/project/jQueryProgressBar$(document).ready(functio... 查看详情

qt编写自定义控件14-环形进度条(代码片段)

...即当前进度90%,剩余的10%也需要设置成不同的颜色,还有一个重要的功能是,能够指定多个警戒值,一旦超过或者小于该值,则当前进度自动切换到预先设定的警戒值颜色,而不需要用户自己去判断警戒值去设置警戒颜色, 查看详情

css笔记:css与svg实现元素沿环形路径动画-2(代码片段)

查看详情

html笔记:css与svg实现元素沿环形路径动画-1(代码片段)

查看详情