全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

JS+canvas动态绘制饼图的方法示例

本文实例讲述了JS+canvas动态绘饼图的方法。分享给大家供大家参考,具体如下:

运行效果图如下:

完整代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>www. canvas饼状图</title>
</head>
<body>
<canvas id="canvas" width="800" height="600" style="border:1px solid red"></canvas>
</body>
<script>
  var colors = (function () {
    return ( "aliceblue,antiquewhite,aqua,aquamarine,azure,beige,bisque,black,blanchedalmond,blue," +
    "blueviolet,brown,burlywood,cadetblue,chartreuse,chocolate,coral,cornflowerblue,cornsilk," +
    "crimson,cyan,darkblue,darkcyan,darkgoldenrod,darkgray,darkgreen,darkgrey,darkkhaki,darkmagenta," +
    "darkolivegreen,darkorange,darkorchid,darkred,darksalmon,darkseagreen,darkslateblue,darkslategray," +
    "darkslategrey,darkturquoise,darkviolet,deeppink,deepskyblue,dimgray,dimgrey,dodgerblue,firebrick," +
    "floralwhite,forestgreen,fuchsia,gainsboro,ghostwhite,gold,goldenrod,gray,green,greenyellow,grey," +
    "honeydew,hotpink,indianred,indigo,ivory,khaki,lavender,lavenderblush,lawngreen,lemonchiffon," +
    "lightblue,lightcoral,lightcyan,lightgoldenrodyellow,lightgray,lightgreen,lightgrey,lightpink," +
    "lightsalmon,lightseagreen,lightskyblue,lightslategray,lightslategrey,lightsteelblue,lightyellow," +
    "lime,limegreen,linen,magenta,maroon,mediumaquamarine,mediumblue,mediumorchid,mediumpurple," +
    "mediumseagreen,mediumslateblue,mediumspringgreen,mediumturquoise,mediumvioletred,midnightblue," +
    "mintcream,mistyrose,moccasin,navajowhite,navy,oldlace,olive,olivedrab,orange,orangered,orchid," +
    "palegoldenrod,palegreen,paleturquoise,palevioletred,papayawhip,peachpuff,peru,pink,plum,powderblue," +
    "purple,rebeccapurple,red,rosybrown,royalblue,saddlebrown,salmon,sandybrown,seagreen,seashell,sienna," +
    "silver,skyblue,slateblue,slategray,slategrey,snow,springgreen,steelblue,tan,teal,thistle,transparent," +
    "tomato,turquoise,violet,wheat,white,whitesmoke,yellow,yellowgreen" ).split(',');
  })();
  function Bing(obj) {
    this.start = 0;
    for(var key in obj){
      this[key] = obj[key];
    }
    this.init();
  }
  Bing.prototype = {
    init: function () {
      this.handle();
      this.render(this.data2);
      this.drawText();
    },
    /**
     * 渲染页面
     * @param obj
     * @param i
     */
    render: function (obj) {
      //3、计算每一个扇形的起始弧度和结束弧度
      this.data2.forEach(function (v, i) {
        var obj = {};
        //第一个扇形的起始弧度:start 结束:start+第一个扇形占据的弧度差
        obj.start = this.start;
        obj.end = this.start + v.radian;
        this.start += v.radian;
        //绘制扇形
        this.ctx.beginPath();
        this.ctx.moveTo(300, 300);
        this.ctx.arc(300, 300, 150, obj.start, obj.end);
        this.ctx.fillStyle = colors[i * 15];
        this.ctx.fill();
      }, this);
    },
    /**
     * 处理数据
     */
    handle:function(){
      var sum = 0;
      this.data.forEach(function (v) {
        sum += v;
      });
      //2、计算每一个数据所占的比重
      this.data2 = this.data.map(function (v) {
        var obj = {};
        obj.number = v;
        obj.ratio = v / sum;//每个数据占据的比重
        obj.radian = 2 * Math.PI * v / sum;//该扇形所占据的弧度
        obj.start = this.start;
        obj.end = this.start + obj.radian;
        this.start = obj.end;
        return obj;
      },this);
    },
    drawText:function(){
      this.ctx.font = "30px 微软雅黑";
      this.ctx.fillStyle = 'red';
      this.data2.forEach(function(obj){
        //计算文字所在的弧度
        r2 = obj.start + obj.radian/2;
        //就按相对于圆心文字偏移的位置
        b = this.r*Math.cos(r2);
        h = this.r*Math.sin(r2);
        //文字的位置
        var x2 = this.x + b;
        var y2 = this.y + h;
        this.ctx.fillText(obj.number,x2,y2);
      },this);
    }
  };
  var canvas = document.querySelector('canvas');
  var ctx = canvas.getContext('2d');
  var data = [1, 3, 5, 7, 9];
  var bing = new Bing({
    ctx:ctx,
    x:300,
    y:300,
    r:150,
    data:data
  });
</script>
</html>

更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript+HTML5特效与技巧汇总》、《JavaScript动画特效与技巧汇总》、《JavaScript图形绘制技巧总结》、《JavaScript切换特效与技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。


# JS  # canvas  # 动态绘制  # 饼图  # extjs图形绘制之饼图实现方法分析  # JavaScript使用百度ECharts插件绘制饼图操作示例  # 读取数据库的数据并整合成3D饼图在jsp中显示详解  # Javascript highcharts 饼图显示数量和百分比实例代码  # html+js+highcharts绘制圆饼图表的简单实例  # 使用js画图之饼图  # javaScript矢量图表库-gRaphael几行代码实现精美的条形图/饼图/点图/曲线图  # 轻松使用JSP生成饼图  # JavaScript 绘制饼图的示例  # 第一个  # 相关内容  # 感兴趣  # 数据结构  # 微软  # 给大家  # 相对于  # 更多关于  # 所占  # 所述  # 程序设计  # 讲述了  # darkslategrey  # darkturquoise  # darkviolet  # darkslategray  # darksalmon  # darkseagreen  # darkslateblue  # dodgerblue 


相关文章: 如何快速搭建安全的FTP站点?  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  如何快速生成橙子建站落地页链接?  图册素材网站设计制作软件,图册的导出方式有几种?  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  如何快速搭建二级域名独立网站?  攀枝花网站建设,攀枝花营业执照网上怎么年审?  网站制作的方法有哪些,如何将自己制作的网站发布到网上?  网站制作多少钱一个,建一个论坛网站大约需要多少钱?  历史网站制作软件,华为如何找回被删除的网站?  佛山网站制作系统,佛山企业变更地址网上办理步骤?  公司网站制作价格怎么算,公司办个官网需要多少钱?  如何在建站之星绑定自定义域名?  小程序网站制作需要准备什么资料,如何制作小程序?  ,想在网上投简历,哪几个网站比较好?  盐城做公司网站,江苏电子版退休证办理流程?  网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?  整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?  大同网页,大同瑞慈医院官网?  如何自定义建站之星网站的导航菜单样式?  教学网站制作软件,学习*后期制作的网站有哪些?  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?  如何打造高效商业网站?建站目的决定转化率  如何快速搭建响应式可视化网站?  建站之星CMS五站合一模板配置与SEO优化指南  微信推文制作网站有哪些,怎么做微信推文,急?  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  网站制作说明怎么写,简述网页设计的流程并说明原因?  建站之星安装失败:服务器环境不兼容?  网站设计制作企业有哪些,抖音官网主页怎么设置?  如何高效利用亚马逊云主机搭建企业网站?  建站之星代理平台如何选择最佳方案?  网站代码制作软件有哪些,如何生成自己网站的代码?  Python lxml的etree和ElementTree有什么区别  威客平台建站流程解析:高效搭建教程与设计优化方案  怀化网站制作公司,怀化新生儿上户网上办理流程?  C#如何使用XPathNavigator高效查询XML  如何用虚拟主机快速搭建网站?详细步骤解析  如何通过wdcp面板快速创建网站?  如何通过可视化优化提升建站效果?  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  如何选择最佳自助建站系统?快速指南解析优劣  C#怎么使用委托和事件 C# delegate与event编程方法  如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法  建设网站制作价格,怎样建立自己的公司网站?  建站中国官网:模板定制+SEO优化+建站流程一站式指南  早安海报制作网站推荐大全,企业早安海报怎么每天更换? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。