html代码:

<canvas id="clickCanvas2"  width="180" height="180" data-total="100" data-curr="75"></canvas>

js代码:

$(function(){
          
                $("#clickCanvas1”).canvasChart({  
                    borderColor: "#24a8e6"  
                });
         
        });

// canvas画圆函数开始
 (function($, window, undefined) {  
      
         $.fn.canvasChart = function(options) {  
      
           var defaults = { };  
           var settings = $.extend({}, defaults, options);
       
           var canvas = $(this).get(0);  
           var total =  $(this).attr("data-total");  
           var curr = $(this).attr("data-curr");  
           var constrast = parseFloat(curr/total).toFixed(2); //比例  
           var context = null;  
      
           if ( !canvas.getContext) {  
             return;  
           }  
      
           // 定义开始点的大小  
           var startArc = Math.PI/2;  
           // 根据占的比例画圆弧  
           var endArc = (Math.PI * 2) * (constrast);  
      
           context = canvas.getContext("2d");  
           context.translate(90,90);  
      
           // 绘制背景圆  
           context.save(); // 保存当前状态 包含 颜色  路径  变形  
           context.beginPath(); // 定义一个子路径开始  
           context.strokeStyle = "#e9e9e9"; //线的颜色  
           context.lineWidth = "2";// 线的大小  
           context.arc(0, 0, 85, 0, Math.PI * 2, true);// 画一个圆  
           context.closePath();// 关闭子路径  
           context.stroke();  
      
           context.restore();// 还原上一个save保存的状态  
      
           // 绘制比例圆  
           context.save();  
           context.rotate(-startArc + Math.PI/180*2);  
           context.beginPath();  
           context.strokeStyle = settings.borderColor;  
           context.lineWidth = "4";  
           context.arc(0, 0, 83, 0, (curr % total == 0 ? Math.PI*2 : (endArc-Math.PI/180*3)), false);  
           context.stroke();  
      
           context.restore();  
      
           // 判断如果是百分百就不用画开始点和结束点的圆了  
           if ( curr % total == 0) {  
             return;  
           }  
      
           // 绘制开始时圆点  
           context.save();  
           context.rotate(-startArc);  
           context.beginPath();  
           context.fillStyle = settings.borderColor;  
           context.arc(83, 2, 2, 0, (Math.PI * 2) , false);  
           context.fill();  
      
           context.restore();  
      
           // 绘制结束时圆点  
           context.save();  
           context.rotate(endArc-startArc);  
           context.beginPath();  
           context.fillStyle = settings.borderColor;  
           context.arc(83, -2, 2, 0, (Math.PI * 2) , false);  
           context.fill();  
      
           context.restore();  
      
         }  
      
       })($, window);

 // canvas画圆函数结束

canvas 画圈 demo的更多相关文章

  1. canvas画箭头demo

    效果图: 代码: <!DOCTYPE html> <html> <title>canvas画箭头demo</title> <body> &l ...

  2. HTML5 之Canvas 绘制时钟 Demo

    <!DOCTYPE html> <html> <head> <title>Canvas 之 时钟 Demo</title> <!--简 ...

  3. 深夜,用canvas画一个时钟

    深夜,用canvas画一个时钟 查看demo 这几天准备阿里巴巴的笔试,可以说已经是心力交瘁,自从阿里和蘑菇街的内推被刷掉之后,开始越来越怀疑起自己的能力来,虽然这点打击应该是微不足道的.毕竟校招在刚 ...

  4. 兼容IE浏览器的canvas画线和圆圈

    1.新建test.html文件,代码如下: <!DOCTYPE html><html><head>    <meta charset="utf-8& ...

  5. python基础练习题(题目 画圈,学用circle画圆形。)

    day37 --------------------------------------------------------------- 实例056:画圈 题目 画图,学用circle画圆形. 分析 ...

  6. 使用javascript和canvas画月半弯

    使用javascript和canvas画月半弯,月半弯好浪漫!浏览器须支持html5 查看效果:http://keleyi.com/a/bjad/8xqdm0r2.htm 以下是代码: <!do ...

  7. 踩个猴尾不容易啊 Canvas画个猴子

    踩个猴尾不容易啊  Canvas画个猴子 <!DOCTYPE html> <html> <head> <meta charset="UTF-8&qu ...

  8. canvas画随机闪烁的星星

    canvas画一颗星星: 规则的星星有内切圆和外切圆,每两个点之间的角度是固定的,因此可得到星星的每个点的坐标,画出星星. function drawStars(x,y,radius1,radius2 ...

  9. canvas画时钟

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...

随机推荐

  1. WCF学习之旅—WCF第二个示例(六)

    第五步,创建数据服务 在“解决方案资源管理器”中,使用鼠标左键选中“SCF.WcfService”项目,然后在菜单栏上,依次选择“项目”.“添加新项”. 在“添加新项”对话框中,选择“Web”节点,然 ...

  2. defered,promise回顾

    defered,promise回顾 http://www.ruanyifeng.com/blog/2011/08/a_detailed_explanation_of_jquery_deferred_o ...

  3. Kafka随笔一

    一.KafKa所涉及到的名词概念: 1.    Topic:用于划分Message的逻辑概念,一个Topic可以分布在多个Broker上. 2.    Partition:是Kafka中横向扩展和一切 ...

  4. jQuery 2.0.3 源码分析Sizzle引擎 - 超级匹配

    声明:本文为原创文章,如需转载,请注明来源并保留原文链接Aaron,谢谢! 通过Expr.find[ type ]我们找出选择器最右边的最终seed种子合集 通过Sizzle.compile函数编译器 ...

  5. Mask裁切UI粒子特效或者3D模型

    刚好前几天有人问我这个问题,再加上新项目也可能用,所以这两天就研究了一下.其实如果粒子特效 和3D模型 都用RenderTexture来做的话就不会有裁切的问题,但是粒子特效用RenderTextur ...

  6. ASP.NET MVC之持久化TempData及扩展方法(十三)

    前言 之前在开始该系列之前我们就讲述了在MVC中从控制器到视图传递数据的四种方式,但是还是存在一点问题,本节就这个问题进行讲述同时进行一些练习来看看MVC中的扩展方法. 话题 废话不必多说,我们直接进 ...

  7. Ubuntu杂记——Ubuntu下Eclipse搭建Maven、SVN环境

    正在实习的公司项目是使用Maven+SVN管理的,所以转到Ubuntu下也要靠自己搭环境,自己动手,丰衣足食.步骤有点简略,但还是能理解的. 一.安装JDK7 打开终端(Ctrl+Alt+T),输入  ...

  8. linux标准IO缓冲(apue)

    为什么需要标准IO缓冲? LINUX用缓冲的地方遍地可见,不管是硬件.内核还是应用程序,内核里有页高速缓冲,内存高速缓冲,硬件更不用说的L1,L2 cache,应用程序更是多的数不清,基本写的好的软件 ...

  9. cocopads命令行

  10. Windows Server 2008 R2 添加且制成“NFS服务器”角色后与Unix客户端匿名访问常见问题

    在复杂的主机与网络环境中,我们可能会接触到多种主机与操作系统,配合Windows Server 2008 R2的原生“NFS服务器”功能可以让这样的复杂操作系统更方便应用. 然而面对网络上众多的帮助指 ...