import React, { useState, useEffect } from "react"
import { css } from "emotion"

//num是从父级传来的百分比数值

export default function({ num }) {
let rightTrnas = css`
      transform: rotate(0deg);
`
let leftTrnas = css`
     transform: rotate(${0}deg);
 `
if (num <= 180) {
    rightTrnas = css`
       transform: rotate(${(Math.round(num * 100) / 100) * 3.6}deg);
    `
} else {
     rightTrnas = css`
        transform: rotate(180deg);
     `
     leftTrnas = css`
       transform: rotate(${(Math.round(num * 100) / 100) * 3.6 - 180}deg);
`
}
return (
        <div className={circleCss}>
               <div className="circle">
                     <div className="pie_left">
                          <div className={`left ${leftTrnas}`}></div>
                    </div>
                    <div className="pie_right">
                          <div className={`right ${rightTrnas}`}></div>
                    </div>
                   <div className="mask">
                            <span>{Math.round(num * 100) / 100}</span>%
                    </div>
              </div>
         </div>
     )
}
const circleCss = css`
         display: flex;
         justify-content: center;
         align-items: center;
         & .circle {
            width: 50px;
            height: 50px;
            position: relative;
            border-radius: 50%;
            background: #e9e9e9;
         }
       & .pie_left,
       & .pie_right {
           width: 50px;
           height: 50px;
           position: absolute;
           top: 0;
           left: 0;
        }
       & .left,
       & .right {
            width: 50px;
            height: 50px;
            background: #ff721c;
            border-radius: 50%;
            position: absolute;
            top: 0;
            left: 0;
          }
      & .pie_right,
      & .right {
          clip: rect(0, auto, auto, 25px);
       }
      & .pie_left,
      & .left { 
           clip: rect(0, 25px, auto, 0);
      }
      & .mask {
            width: 44px;
            height: 44px;
            border-radius: 50%;
            left: 3px;
            top: 3px;
            background: #fff;
            position: absolute;
            text-align: center;
            line-height: 44px;
            font-size: 12px;
            color: #ff721c;
       }
  `
如果要修改圆环的大小修改宽高和left ,right中的 clip: rect的值即可

react 实现圆环进度条的更多相关文章

  1. Vue/React圆环进度条

    数据展示,一直是各行各业乐此不疲的需求,具体到前端开发行业,则是各种各种图表数据展示,各种表格数据展示,烦不胜烦(繁不胜繁)! 前几天刚做了折线图.柱状图.饼状图之类的图表数据展示效果,今天又碰到了类 ...

  2. 两种CSS3圆环进度条详解

    晚上睡觉之前,我抽了1个多小时,研究了一下圆环进度条,结合从网上查阅的资料,我终于掌握了两种圆环的生成方法. 这次的效果就是单纯的CSS3效果,也没有写具体的JS,等以后有时间在好好整理一下吧~. 第 ...

  3. canvas绘制百分比圆环进度条

    开发项目,PM会跟踪项目进度:完成某个事情,也可以设置一个完成的进度. 这里用canvas绘制一个简单百分比圆环进度条. 看下效果: 1. 动画方式   2. 静默方式   // 贴上代码,仅供参考 ...

  4. svg实现圆环进度条

    开源实现:https://github.com/lugolabs/circles 自行实现:圆环与svg画布间剩的空间太多. <!DOCTYPE html> <html> &l ...

  5. css3 制作圆环进度条

    引子 移动端做一个 loadiing 加载的图标,跟以往沿用的都不太一样,是一个圆环进度条,圆环进度条也就罢了,还得能用百分比控制. CSS3 实现圆环 demo 刚开始写这个圆环的时候是参照帖子上给 ...

  6. CSS3实现圆环进度条

    摘要:圆环进度条被应用于各个场景,比如我们可以用来表示加载进度等.通常我们可以用 css3 的动画去实现. 详解 css3 实现圆环进度条 简单的画一个圆环,我们都知道如何使用 css 画一个圆环.( ...

  7. 浅谈一下关于使用css3来制作圆环进度条

    最近PC端项目要做一个这样的页面出来,其他的都很简单,关键在于百分比的圆环效果.我最初打算是直接使用canvas来实现的,因为canvas实现一个圆是很简便的. 下面贴出canvas实现圆环的代码,有 ...

  8. H5 可堆叠的圆环进度条,支持任意数量子进度条

    by Conmajia SN: S22-W1M 由来 看到一篇帖子<vue实用组件--圆环百分比进度条>,让我想起了很多年前我在WinForm下仿制过的Chrome进度条. ▲ 原版进度条 ...

  9. ios 画圆环进度条

    #import <UIKit/UIKit.h> @interface SNCircleProgressView : UIView /** * 进度值0-1.0之间 */ @property ...

随机推荐

  1. 如何获取Session对象中的对象

    先调用request的getSession()方法获取一个HttpSession的对象,然后将这个对象进行强制类型转换成原本封装的对象,这样就能获取Session对象中的对象了 1.调用request ...

  2. vuex的state选项rootState.js

    说明:本文做为vuex学习详细解(主页目录 配置主页:vuex学习配置详解(目录rootState.js文件如下 作用声明 vuex的state选项常量,并导出默认为state /** * 此文件除声 ...

  3. 学习使用add()()()迭代调用,柯里化处理

    将多个参数的函数,转换成单参数函数链 以add()()()举例 function add(){ 使用数组保存参数 let _args = Array.prototype.slice.call(argu ...

  4. C#设计模式学习笔记:(4)建造者模式

    本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7614630.html,记录一下学习过程以备后续查用. 一.引言 在现实生活中,我们经常会遇到一些构成比较复杂 ...

  5. 解决const char* to char* 的错误

    一般情况下 char* string = "abc"; 编译后会出现标题中的错误. 我们只需要在字符串前加上const_cast<char*>即可,这个作用是丢弃变量的 ...

  6. Centos 7 firewall的防火墙的规则

    这是官方文档: http://www.firewalld.org/documentation/man-pages/firewall-cmd.html 想使用iptables的规则,firewall也可 ...

  7. javaweb利用javabean将数据库中内容遍历在页面输出

    效果如下图 它所实现的就是把数据库中一个表中所有的数据一条一条以表格的形式输出在网页上, 实现方法如下 首先我们要从数据库读取数据,这里要借助javabean来方便我们传递数据 以上面的为例,我要输出 ...

  8. tensor数据基操----索引与切片

    玩过深度学习图像处理的都知道,对于一张分辨率超大的图片,我们往往不会采取直接压平读入的方式喂入神经网络,而是将它切成一小块一小块的去读,这样的好处就是可以加快读取速度并且减少内存的占用.就拿医学图像处 ...

  9. Java安全笔记

    前言 后端接口开发中,涉及到用户私密信息(用户名.密码)等,我们不能传输明文,必须使用加密方式传输.这次政府项目中,安全测试组提出了明文传输漏洞,抽空研究了下Java加解密相关知识,记录下. 散列函数 ...

  10. 剑指offer-面试题25-合并两个排序的链表-链表

    /* 题目: 输入两个递增排序的链表,合并这两个链表并使新的链表中的节点依然是递增排序. 返回新链表的头节点. */ /* 思路: 1.返回的链表的头节点为两个链表中头节点数值更小的为链表1. 2.进 ...