利用canvas进行一个饼形图的绘制
2018-06-24 00:59:34来源:未知 阅读 ()
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>绘制饼形图。</title>
<style>
canvas{
border: 1px solid green;
}
</style>
</head>
<body>
<!-- 绘制饼形图 -->
<canvas width="500" height="500" id="canvas"></canvas>
</body>
<script>
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
function toAngle(radian){
return radian*180/Math.PI;
}
function toRadian(angle){
return angle*Math.PI/180;
}
/*将饼状图画出来*/
var colors = 'green,yellow,pink,blue,red,lightgreen,lightblue'.split(',');
var text = 'HTML5,Canvas,Javascript,Css3,Ajax,框架封装,jQuery与移动Web'.split(',');
var x0 = canvas.width/2,
y0 = canvas.height/2,
radius = 100,
start = -5,
distance = 20,
padding = 5,
step = 360/colors.length;
for(var i = 0 ; i < colors.length ; i ++){
ctx.beginPath();
ctx.fillStyle = colors[i];
ctx.moveTo(x0,y0);
ctx.arc(x0,y0,radius,toRadian(start),toRadian(start+=step));
ctx.fill();
/*画斜线*/
ctx.beginPath();
ctx.strokeStyle = colors[i];
var x1 = x0 + (radius+distance)*Math.cos(toRadian(( start-step/2 ))),
y1 = y0 + (radius+distance)*Math.sin(toRadian(( start-step/2 )));
ctx.moveTo(x0,y0);
ctx.lineTo(x1,y1);
ctx.stroke();
/*写文字*/
ctx.beginPath();
ctx.fillStyle = colors[i];
var textX = x1,
textY = y1;
if(start-step/2 > 90 && start-step/2 < 270){
ctx.textAlign = 'right';
textX = textX - padding;
}else{
ctx.textAlign = 'left';
textX = textX + padding;
}
ctx.fillText(text[i],textX,textY-padding/2);
/*画直线*/
ctx.beginPath();
ctx.moveTo(x1,y1);
//计算文字的宽度
var length = ctx.measureText( text[ i ] ).width
if(start-step/2 > 90 && start-step/2 < 270){
x1 += -2*padding-length;
}else{
x1 += 2*padding + length;
}
ctx.lineTo(x1,y1);
ctx.stroke();
/*画饼形图*/
/*ctx.beginPath();
ctx.fillStyle = colors[i];
ctx.moveTo(x0,y0);
ctx.arc(x0,y0,radius,toRadian(start),toRadian(start+=step));
ctx.fill();*/
}
</script>
</html>
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:CSS学习总结-盒子模型
下一篇:伪类元素实现可伸缩时间轴
- Vue 结合html2canvas和jsPDF实现html页面转pdf 2020-04-25
- 利用css 实现 视觉差效果 2020-04-09
- 利用vertical-align属性实现分隔符 2020-04-03
- CSS3如何利用粒子旋转伸缩加载动画 2020-03-13
- 如何利用 githob 上传自己的网站 2020-03-01
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash
