今天跟大家分享一下最近根据业务需求开发的一个动态百分比饼图的react组件(今天比较闲)

我先是用CSS3做发现做不到这种效果,然后尝试用Canvas,做到一半发现也不合适而且有模糊的问题遂放弃。最后决定用SVG!

主要思路就是用path椭圆弧指令(A)画扇形,然后根据增量(输入框内的值)来增加或减小扇形的弧度,输入框只是用来演示的,实际上要用到后台接口数据

HTML结构如下:

SVG椭圆弧路径指令说明:(来自CSDN)

指令

A (绝对) a (相对)

名称

elliptical arc 椭圆弧

参数

代码:A rx ry x-axis-rotation large-arc-flag sweep-flag x y

rx ry 是椭圆的两个半轴的长度。

x-axis-rotation 是椭圆相对于坐标系的旋转角度,角度数而非弧度数。

large-arc-flag 是标记绘制大弧(1)还是小弧(0)部分。

sweep-flag 是标记向顺时针(1)还是逆时针(0)方向绘制。

x y 是圆弧终点的坐标。

描述

从当前点绘制一段椭圆弧到点 (x, y),椭圆的大小和方向由 (rx, ry) 和 x-axis-rotation 参数决定, x-axis-rotation 参数表示椭圆整体相对于当前坐标系统的旋转角度。椭圆的中心坐标 (cx, cy) 会自动进行计算从而满足其它参数约束。large-arc-flag 和 sweep-flag 也被用于圆弧的计算与绘制。

先不考虑动画效果,只看怎么画一个扇形:(说起来比较麻烦,就在注释上逐行说吧)

其中PI为我在组件前面定义的常量: const PI = 3.1416

上面代码声明的x1,y1,x2,y2代表的是起点和终点弧边的坐标,如图所示:

这样绘制扇形的function就写好了~

接下来就是要让它动起来!还要如丝般顺滑!咋整呢?当然用 requestAnimationFrame 了!如果你还不了解它请移步->MDN传送门

接下来就去调用animationSvg就好了,可以从输入框取到弧度值,或者从后台的数据中获取计算,注意一定要从百分比转化成弧度:

const value = Number((this.input.value / 100) * PI * 2);

this.animationSvg(value);复制代码

这样就实现了文章开头GIF的那种效果,总结起来就是:

获取到数据,增量或者减量,单位为弧度;

执行requestAnimationFrame动画;

计算path并渲染在DOM中;

重复执行2~3两步直到到达弧度的终点

眼见为实,大家可以去这里看到线上DEMO:传送门

可能代码的实现方式还不是最简洁的,各路大神路过欢迎给出建议~

html 百分比饼状图,如何开发一个百分比饼状图动画相关推荐

  1. 用Python开发一个能拼长图的图片合并工具

    上个月在某招聘网站上投简历,上传图片有数量限制,导致部分验证证明扫描件没有上传.招聘的小妹妹说可以拼长图作为一个图片附件上传.搜了一拼长图的app,结果免费版拼出来的长图模糊不清.有清晰版,就是要收费 ...

  2. android 折线图 渐变,做一个渐变色的折线图

    折线图 一个折线图的需求,好久没写过折线图了,打算自己弄下. 对于折线图或者条形统计图来说,我很少自己去封装,并不是有多难有多麻烦(其实找到规律之后反而很简单),而是我觉得根本没有一个好的封装方式,U ...

  3. [deviceone开发]-一个很炫的手势动画示例

    一.简介 这是iOS下的效果,android下完全一致.通过do_GestureView组件和do_Animation组件,deviceone能很容易实现复杂的跨平台纯原生动画效果,这个示例就是通过手 ...

  4. 【云开发】10分钟零基础学会做一个快递查询微信小程序,快速掌握微信小程序开发技能(轮播图、API请求)

    大家好,我叫小秃僧 这次分享的是10分钟零基础学会做一个快递查询微信小程序,快速掌握开发微信小程序技能. 这篇文章偏基础,特别适合还没有开发过微信小程序的童鞋,一些概念和逻辑我会讲细一点,尽可能用图说 ...

  5. 开发一个软件的主要流程

    本文重点解决如下问题:开发一个软件的主要流程是什么?了解开发一个软件的主要流程对于编程者而言非常重要,它能够让编程者对如何开发一个软件有个整体的认知.开发一个软件的主要流程包括:1)软件前端界面设计: ...

  6. html按钮轮播图,四种方式实现轮播图

    不论是app,还是网站,基本上都会出现轮播图,今天和大家分享几种不同工具实现轮播图的几种方式. 轮播图的基本样式和功能就不需要解释了,相信能根据题目选择看文章的话都知道啥是轮播图,如果哪位读者老爷真的 ...

  7. 做饼状图时,显示百分比的解决方案

    http://fluagen.blog.51cto.com/146595/86733 在项目中做饼状图时,显示百分比的解决方案: 饼图显示百分比 在饼图中JFreeChart默认只显示选项和数值,没有 ...

  8. 安卓饼状图设置软件_安卓(Android)开发之自定义饼状图

    先来看看效果图 先分析饼状图的构成,非常明显,饼状图就是一个又一个的扇形构成的,每个扇形都有不同的颜色,对应的有名字,数据和百分比. 经以上信息可以得出饼状图的最基本数据应包括:名字 数据值 百分比 ...

  9. python3__绘图__常用数据分析图形(热力图,雷达图,箱线图,平行坐标,3D图,混淆矩阵,饼状图)

    1.matplotlib.pyplot简介 matplotlib.pyplot是一个有命令风格的函数集合,它看起来和MATLAB很相似.每一个pyplot函数都使一副图像做出些许改变,例如创建一幅图, ...

最新文章

  1. python代码块-Python中的代码块和非代码块是什么
  2. 修改MySQL数据文件默认路径
  3. 编译问题二 /snmplib/tools.c:920 undefined reference to `clock_gettime' 问题解决
  4. 直接点不玩虚的--启明云端千元现金红包、50pcs开发板直播现场拿走不谢
  5. 异常:没有找到本地方法库,java.lang.UnsatisfiedLinkError: no trsbean in java.library.path
  6. java建一个conversion_Scala中的JavaConverters和JavaConversions之间有什么区别?
  7. nlp3-有限自动机FLandFA
  8. 傅里叶变换常用公式表_25个常用公式计算表+7套施工测量计算表,全自动计算,测量无压力...
  9. 小程序如何上传代码到服务器,云服务器怎么上传小程序代码
  10. 【路径规划】局部路径规划算法——B样条曲线法(含python实现)
  11. 易游网络验证好不好?如何正确的使用易游验证
  12. 响应式网页设计学习笔记
  13. Camunda流程引擎及表结构认识
  14. 对话哈佛大学教授Lukin:量子计算将在我们有生之年普及! | AI英雄
  15. 西门菲莎大学计算机专业怎么样,西蒙菲莎大学世界排名2021年
  16. 用Canvas为网页添加动态背景
  17. arch linux界面,ArchLinux图形界面安装
  18. ZYNQ中裸机开发和Linux开发有什么区别?
  19. 51单片机——矩阵按键逐行扫描短按长按一直按方案1.2
  20. lucas定理(学习笔记)

热门文章

  1. 对app请求的参数和响应进行rsa加密和解密
  2. uniapp云打包成app后,在Android12手机上横屏样式未填满手机界面;在ios手机上横屏不生效;问题解决
  3. Centos8 nginx1.18.0编译安装
  4. ios设置按钮不能点击并变灰色
  5. python给图片打马赛克
  6. 计算机基础与应用计划大纲,计算机基础课程大纲及教学计划
  7. 20190503(cmake安装,利用libwebsockets库去实现http服务器,websocket服务器,虚拟机安装)
  8. 如何在Android Studio使用单选和复选框
  9. 淘宝整店商品列表查询接口(店铺所有商品API接口)
  10. 解决问题:Pr文件导入器检测到的文件结构不一致已禁止读取和写入此文件的元数据无法将XMP数据写入输出文件