SVG path绘制百分比圆弧,给力啊

利用SVG的circle可以绘制百分比圆弧,但总觉得有点不够高端,相比起来,我更喜欢利用SVG的path来绘制百分比圆弧,因为其中会利用到绘制圆弧的基本数学知识(我已经把数学还给了老师,从网络上抓取别人的成果,进行了改造),这样就觉得很有装逼范。

一、效果图

二、实现方法

页面元素构成

<svg height="108" version="1.1" width="108" xmlns="http://www.w3.org/2000/svg"
 style="overflow: hidden; position: relative; left: -0.5px;">
    <path class="ring" rate="${deal.attrs.rate}" fill="none" x="54" y="7" r="47" stroke="#fd30ae" d="M54,7A47,47,0,1,1,11,71" stroke-width="4" />
</svg>

是不是看的有点晕,如果你不熟悉SVG的话,先看svg中path标签的用法,对path的基本属性进行了解。

另外呢,我给path赋予了rate(百分比)、x(moveto的x坐标)、y(moveto的y坐标)、r(圆弧的半径)的属性。

赋值

// 圆弧
$("path.ring", $p).each(function() {
    var $this = $(this);

    YUNM.debug(‘path.ring‘ + $this.selector);

    var r = $this.attr("r");
    var x = $this.attr("x"), rate = $this.attr("rate");

    // 给path 设置属性
    if (rate < 100) {
        var progress = rate / 100;

        // 将path平移到我们需要的坐标位置
        $this.attr(‘transform‘, ‘translate(‘ + x + ‘,‘ + x + ‘)‘);

        // 计算当前的进度对应的角度值
        var degrees = progress * 360;

        // 计算当前角度对应的弧度值
        var rad = degrees * (Math.PI / 180);

        // 极坐标转换成直角坐标
        var x = (Math.sin(rad) * r).toFixed(2);
        var y = -(Math.cos(rad) * r).toFixed(2);

        // 大于180度时候画大角度弧,小于180度的画小角度弧,(deg > 180) ? 1 : 0
        var lenghty = window.Number(degrees > 180);

        // path 属性
        var descriptions = [ ‘M‘, 0, -r, ‘A‘, r, r, 0, lenghty, 1, x, y ];

        $this.attr(‘d‘, descriptions.join(‘ ‘));
    }
});

这段代码就主要根据圆弧的起始点、半径、圆弧的进度来计算圆弧的终点。这段代码中用到的数学知识我肯定是不记得了,网络上其他程序员提供的demo。

三、简单改造后的源码,可直接运行

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>HTML5中的SVG属性实现圆形进度条效果</title>
</head>
<body>

    <svg width="500px" height="500px" version="1.1" xmlns="http://www.w3.org/2000/svg">
    <path id="ring" fill="none" stroke="#fd30ae" />
    </svg>
    <script>

    var path = document.getElementById(‘ring‘);
    var r=100;

    var progress=0.6;

    //将path平移到我们需要的坐标位置
    ring.setAttribute(‘transform‘, ‘translate(‘+r+‘,‘+r+‘)‘);

    // 计算当前的进度对应的角度值
    var degrees = progress * 360;  

    // 计算当前角度对应的弧度值
    var rad = degrees* (Math.PI / 180);

    //极坐标转换成直角坐标
    var x = (Math.sin(rad) * r).toFixed(2);
    var y = -(Math.cos(rad) * r).toFixed(2);

    //大于180度时候画大角度弧,小于180度的画小角度弧,(deg > 180) ? 1 : 0
    var lenghty = window.Number(degrees > 180);

    //path 属性
    var descriptions = [‘M‘, 0, -r, ‘A‘, r, r, 0, lenghty, 1, x, y];

    // 给path 设置属性
    path.setAttribute(‘d‘, descriptions.join(‘ ‘));
    </script>
</body>
</html>

这是网络上其他朋友提供的计算方法,我只做了简单的修改,插入到我的项目中。本篇主要用来推广SVG的path绘制百分比圆弧的方法,希望需要的人能够及早得到帮助,感谢!

时间: 2024-10-07 17:00:06

SVG path绘制百分比圆弧,给力啊的相关文章

自定义View系列--Path绘制仿支付宝支付成功动画

前言 使用支付宝付款时,我们可以看到成功或者失败都会有个动画提示,如果我们需要做这样的效果的话,当然,你可以让设计师给你做个GIF,但是我们知道图像比较耗内存的,我们自己可以用代码实现还是代码实现好点吧. 效果 实现方法 首先我们需要了解PathMeasure这个类,这个类我们可以理解为用来管理Path.我们主要看几个方法. PathMeasure(): 构造方法 ,实例化一个对象 PathMeasure(Path path,boolean isClosed):传入Path对象和是否闭合,pat

Base64 URL image CSS &amp; 在线base64 加密/解密 link: $ svg path 线宽:stroke-width

Base64 URL image CSSData URI scheme是在RFC2397中定义的svg path 线宽:stroke-width 在线base64 加密/解密 link: 那么这是什么呢?这是Data URI scheme. Data URI scheme是在RFC2397中定义的,目的是将一些小的数据,直接嵌入到网页中,从而不用再从外部文件载入.比如上面那串字符,其实是一张小图片,将这些字符复制黏贴到火狐的地址栏中并转到,就能看到它了,一张1X36的白灰png图片. 在上面的D

使用SVG Path绘图

最近一个项目,需要做个Web版本的设计器,用来进行工厂流水线布局的设计. 项目中采用了SVG.JS来做,但是以前流水线是采用单纯的画线的方式实现.客户提出希望用不同的底纹表示不同的流水线,经过一番调查,最终决定采用Path,用pattern的方式来填充底纹. 但是文档中对pattern的使用描述的比较含糊,通过一些实验,终于弄的比较清楚了.总结一下: 1.path中的X.Y参数是指以整个画面的左上角为(0,0),来设置偏移的.如果设为0,就是从(0,0)进行填充.如果在(20,20)为起点的地方

CAD参数绘制椭圆弧(com接口)

在CAD设计时,需要绘制椭圆弧,用户可以设置椭圆弧基本属性. 主要用到函数说明: _DMxDrawX::DrawEllipseArc 绘制椭圆弧.详细说明如下: 参数 说明 DOUBLE dCenterX 椭圆的中心点X坐标 DOUBLE dCenterY 椭圆的中心点Y坐标 DOUBLE dMajorAxisX 椭圆的主轴向量X值 DOUBLE dMajorAxisY 椭圆的主轴向量Y值 DOUBLE dRadiusRatio 椭圆的副轴长度与主轴长度的比值 DOUBLE dStartAng

SVG path 标签根据两点和角度绘制弧线

同步发布:https://blog.jijian.link/2020-04-14/svg-arc/ 由于功能受限,此处不能放 iframe 嵌入链接,如需看到实施效果,请移步 https://blog.jijian.link/2020-04-14/svg-arc/ 解析 <path> 标签应该算是 SVG 中最为强大的标签了,各种图形都可以用他绘制. 本文使用 path 标签的贝塞尔曲线 Q 指令绘制弧线. 用法 <path d="M30 90 Q115 139 200 90&

Quartz2D复习(一)--- 基础知识 / 绘制线段圆弧 / 图片水印 / 截图

1.Quartz 2D是一个二维绘图引擎,同时支持ios和Mac系统: Quart2D的API是纯C语言的,API来自于Core  Graphics框架: 2.Quartz 2D可以绘制图形(线段/三角形/矩形/圆和弧).绘制文字.绘制和生成图片.读取/生成pdf.截图/裁剪图片.自定义UI控件等 3.对于界面复杂且个性化的UI,普通的UI控件无法实现,而Quartz2D技术却可以通过自定义UI控件来实现.其实,ios中大部分控件的内容都是通过Quart2D画出来的 4.图形上下文(Graphi

SVG Path高级教程

课程分为四个方面: 1. Path概述 2. 移动和直线命令 3. 弧线命令 4. 贝塞尔曲线命令 Path概述 <path> 标签用来定义路径,Path字符串是由命令及其参数组组成的字符串,是非常强大的绘图工具. 例如: <path  d="M0,0L10,20C30-10,40,20,100,100"  stroke="red"> 命令汇总 命令 含义 M/m (x,y) 移动当前位置 L/l (x,y) 从当前位置绘制线段到指定位置

Android L New API之Verctor动画 1 —— SVG Path

导入 1.VectorDrawable是Android L中新增的一个API,让你可以创建基于XML的矢量图,并结合AnimatedVectorDrawable来实现动画效果. 2.Android L新增支持Vector标签,可以使用Path创建动画,同时支持SVG格式. SVG 简介 1.SVG 指可伸缩矢量图形 (Scalable Vector Graphics)2.SVG 用来定义用于网络的基于矢量的图形3.SVG 使用 XML 格式定义图形4.SVG 图像在放大或改变尺寸的情况下其图形质

svg path中的贝塞尔曲线

首先介绍以下什么是贝塞尔曲线 贝塞尔曲线又叫贝茨曲线(Bezier),由两个端点以及若干个控制点组成,只有两个端点在曲线上,控制点不在曲线上,只是控制曲线的走向. 控制点个数为0时,它是一条直线; 控制点个数为1时,它是二次贝塞尔曲线; 控制点个数为2时,它是三次贝塞尔曲线: .... 数学公式 二次贝塞尔曲线 p0,p2是起始点,p1是控制点 分别把p0,p1,p2点的x,y坐标带入,求出曲线上的点的x,y坐标 三次贝塞尔曲线 p0,p3是起始点,p1,p2是控制点 svg的path中与贝塞尔