利用canvas进行一个饼形图的绘制
<!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>
利用canvas进行一个饼形图的绘制的更多相关文章
- 10分钟,利用canvas画一个小的loading界面
首先利用定义下canvas得样式 <canvas width="1024" height="720" id="canvas" styl ...
- 利用canvas画一个实时时钟
先放一张效果图: 下面是源代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"& ...
- canvas的进阶 - 学习利用canvas做一个炫酷的倒计时功能
先给大家贴一张图片,因为我不会上传视频( ̄□ ̄||) ,请大家谅解了~ 如果有知道怎么上传视频的大神还请指点指点 ^_^ ~ 然后看一下代码: html部分 : <!DOCTYPE html ...
- 利用canvas写一个验证码小功能
刚刚开始接触canvas,写个验证码小功能练练手,实现效果图如下: 主要代码如下: html <!DOCTYPE html> <html lang="en"> ...
- 利用canvas做一个简单个gif停止和播放
var ImagePlayer = function(options) { this.control = options.control; this.image = options.image; th ...
- 1.利用canvas画一个太极图
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 用HTML5的canvas做一个时钟
对于H5来说,canvas可以说是它最有特色的一个地方了,有了它之后我们可以随意的在网页上画各种各样的图形,做一些小游戏啊什么的.canvas这个标签的用法,在网上也有特别多的教程了,这里就不作介绍了 ...
- 利用Canvas进行绘制XY坐标系
首先来一发图 绘制XY的坐标主要是利用Canvas setLeft和setBottom功能(Canvas内置坐标的功能) 1.首先WPF中的坐标系都是从左到右,从上到下的 即左上角位置(0,0)点,所 ...
- 利用canvas阴影功能与双线技巧绘制轨道交通大屏项目效果
利用canvas阴影功能与双线技巧绘制轨道交通大屏项目效果 前言 近日公司接到一个轨道系统的需求,需要将地铁线路及列车实时位置展示在大屏上.既然是大屏项目,那视觉效果当然是第一重点,咱们可以先来看看项 ...
随机推荐
- 通过shell处理多行数据
### 源文件 cat > tmpb <<'EOF' dbname:db_a,start_time::: query_end_time:::,query_total_time:,da ...
- C++标准库类模板(stack)和 队列(queue)
在C++标准库(STL)中有栈和队列的类模板,因此可以直接使用 1.栈(stack):使用栈之前,要先包含头文件 : #include<stack> stack.push(elem); / ...
- DES加密之强制更新下载分离器
数据加密算法(Data Encryption Algorithm,DEA)是一种对称加密算法,很可能是使用最广泛的密钥系统,特别是在保护金融数据的安全中,最初开发的DEA是嵌入硬件中的.通常,自动取款 ...
- RealProxy AOP的实现
微软有一篇实现 一下是对于该实现的理解 https://msdn.microsoft.com/zh-cn/library/dn574804.aspx public class DynamicProxy ...
- Asp.Net webconfig中使用configSections的用法
最近闲来无事,研究研究公司的框架,无意中打开了webconfig页面,发现了一个我不认识的节点<configSections></configSections>,于是百度之,大 ...
- c++ 网络编程(九)LINUX/windows-IOCP模型 多线程超详细教程及多线程实现服务端
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9661012.html 先讲Linux下(windows下在后面可以直接跳到后面看): 一.线程 ...
- Log4J 配置文件模板及代码说明
相对而言,这个日志系统的配置就没那么随意了,而且有些功能用起来也不是那么爽,譬如动态读取配置文件.不过鉴于使用这个日志的系统还是很多,所以也写一个demo贴出来,风格跟log4j2一样,配置的说明全在 ...
- JSP中实现网页访问统计的方法【转】
我采用的是jsp网页,但是不管采用什么语言,原理是一样的. 第一种,单页面统计.就是说,只要点击这个页面就会统计一次. <body> <%!//在这种标记中定义的变量为全局变量 in ...
- NPOI excel导出快速构建
直接上代码,这个是一个在webFrom中的例子,要请求的页面是ashx public void ExportVisaFeeAll(HttpContext context) { try { string ...
- vue加载Element ui地址省市区插件-- element-china-area-data
1.安装 npm install element-china-area-data -S 2.使用(引入) import { provinceAndCityData, regionData, provi ...