本文实例讲述了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小时内与您取得联系。