(转)浅谈HTML5与css3画饼图!
神马系饼图?
饼图,大家都应该熟知,在统计数据对比方面,几乎处处用到。如cnzz的统计饼图

从饼图中,很形象地展示了访问者地区的分布,以扇形为块的方式拼成一个大圆。
都使用什么方法实现
目前众多站点制作饼图大多使用flash,或者后台语言生成,如PHP,Python只要安装相应的基础库就能实现画图。但很少有站点这么干,因为耗费服务器资源。
cnzz里使用的就是flash

PHP生成的

HTML5与CSS3也能画出饼图
不得不说,HTML5与CSS3的推出,将推翻老一代的网页制作者。特别在当今浏览器标准不断统一的情况下,新生的网页制作者几乎想不到在过去的时间里制作网页调兼容性是一件非常痛苦的事。
过去我们要实现圆角只能切图,如今在CSS3里只需一条代码搞定。而CSS3的功能远不止这些,配合HTML5还能画饼图数据分析。
然而,HTML5与CSS3严格意义上不具备编程语言的思想,所以还要借助JS去“画”它。
html代码
|
1
|
<canvas id="bingtu" width="224" height="130" ></canvas> |
JS代码
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
var color = ["#999999","#333333","#336799"];var data = [25,35,50];function drawCircle(){ var canvas = document.getElementById("bingtu"); var ctx = canvas.getContext("2d"); var startPoint= 1.5 * Math.PI; for(var i=0;i<data.length;i++){ ctx.fillStyle = color[i]; ctx.strokeStyle = color[i]; ctx.beginPath(); ctx.moveTo(112,65); ctx.arc(112,65,65,startPoint,startPoint-Math.PI*2*(data[i]/100),true); ctx.fill(); ctx.stroke(); startPoint -= Math.PI*2*(data[i]/100); }}drawCircle(); |
canvas是HTML5新增的画布标签,个人感觉这个标签在将来将大有用途,喜欢研究HTML5的童鞋可以深入研究这个标签。canvas上的高度可以自己随意设置,当然宽不能小于高,否则图形出来不是圆的。
这里重点讲下这段js代码用法
var color = ["#999999","#333333","#336799"]; 画饼图所用的颜色
var data = [25,35,50]; 数据比,全部是数据加起来是100,才能画满整个圆
var ctx = canvas.getContext("2d"); 画2D平面图
var startPoint= 1.5 * Math.PI; 绘制方向起点,有逆顺之分,通常是 1.5*Math.PI 或者 0
ctx.fillStyle = color[i] 填充颜色
ctx.beginPath(); 开始画
ctx.moveTo(112,65); 每次回到圆心,第一个值 112 是 canvas 宽的一半, 65是 canvas 高的一半。其实也可以利用js获取对象的宽高算出来就好,省该canvas宽高后还要去调整JS代码中的参数。
ctx.arc(...); 开始画图,前两个参数是圆心坐标,第三个参数是半径大小,第四个参数是圆周起始位置,第五个参数是弧长,就是我们圆弧的范围,Math.PI*2就是整个圆了,Math.PI是半圆,第六个参数是个布尔值,就是确定是顺时针还是逆时针,这里false是顺时针。
ctx.fill() ; 填充
ctx.stroke(); 边框
startPoint -= Math.PI*2*(data[i]/100); 画完一个善行以后,重新计算回到原点开始绘制下一扇,否则画出来的饼图拼起来就不是圆形了。
效果:

目前唯一的遗憾是还不能在图上加文字。
其它HTML5与CSS3图形统计数据示例


















转载链接:http://www.qttc.net/201212255.html
(转)浅谈HTML5与css3画饼图!的更多相关文章
- 浅谈HTML5单页面架构(二)——backbone + requirejs + zepto + underscore
本文转载自:http://www.cnblogs.com/kenkofox/p/4648472.html 上一篇<浅谈HTML5单页面架构(一)--requirejs + angular + a ...
- 浅谈html5网页内嵌视频
更好的阅读体验:浅谈html5网页内嵌视频 如今在这个特殊的时代下:flash将死未死,微软和IE的历史问题,html5标准未定,苹果和谷歌的闭源和开源之争,移动互联网的大势所趋,浏览器各自为战... ...
- AngularJS进阶(二十五)requirejs + angular + angular-route 浅谈HTML5单页面架构
requirejs + angular + angular-route 浅谈HTML5单页面架构 众所周知,现在移动Webapp越来越多,例如天猫.京东.国美这些都是很好的例子.而在Webapp中,又 ...
- 浅谈html5 video 移动端填坑记
这篇文章主要介绍了浅谈html5 video 移动端填坑记,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 本文介绍了html5 video 移动端填坑记,分享给大家,具体 ...
- 浅谈HTML5单页面架构(一)——requirejs + angular + angular-route
心血来潮,打算结合实际开发的经验,浅谈一下HTML5单页面App或网页的架构. 众所周知,现在移动Webapp越来越多,例如天猫.京东.国美这些都是很好的例子.而在Webapp中,又要数单页面架构体验 ...
- 浅谈html5 响应式布局
一.什么是响应式布局? 响应式布局是Ethan Marcotte在2010年5月份提出的一个概念,简而言之,就是一个网站能够兼容多个终端——而不是为每个终端做一个特定的版本. 这个概念是为解决移动互联 ...
- 浅谈html5及其新特性
什么是 HTML5? HTML5 将成为 HTML.XHTML 以及 HTML DOM 的新标准. HTML 的上一个版本诞生于 1999 年.自从那以后,Web 世界已经经历了巨变. HTML5 仍 ...
- 使用css3画饼图
CSS3 Gradient介绍参考地址: http://www.cnblogs.com/lhb25/archive/2013/01/30/css3-linear-gradient.html http: ...
- 浅谈HTML5中canvas中的beginPath()和closePath()的重要性
beginPath的作用很简单,就是开始一段新的路径,但在使用canvas绘图的过程中却非常重要 先来看一小段代码: var ctx=document.getElementById("can ...
随机推荐
- python datetime时区转换
from pytz import timezone def datetime_as_timezone(date_time, time_zone): tz = timezone(time_zone) u ...
- SCI期刊的审稿流程
审稿中涉及到的人: EIC-Editor in Chief 主编, 此人很重要,有稿件最终决定权. ADM- (可能是) Administrator 应该是协助主编日常工作的. AE-Associat ...
- springMVC整合spring和hibernate4(适合于框架的搭建)
基础的东西不再详细说明,只在这里说明一下主要的配置文件,如何通过配置文件取得sessionFactory . 步骤: 1:在web.xml中引入springmvc的配置文件springmvc.xml( ...
- Android中通过广播方式调起第三方App
今天紧急的跟进一个百度视频App无法调起百度贴吧App的问题,当然,这个是只发现是在4.x的android系统下发生,在2.x版本下,一切正常,(其实是3.1及以上的版本都有问题)具体场景为: 1.贴 ...
- (转)Combobox出现System.Data.DataRowView的原因,以及指定ValueMember的时机问题
原文地址 http://blog.csdn.net/lubiaopan/article/details/5915774 当使用Combobox控件时,出现SelectedValue的值为“System ...
- (转)C# 解析 json
原文: http://www.cnblogs.com/txw1958/archive/2012/08/01/csharp-json.html JSON(全称为JavaScript Object N ...
- javascript 过滤字符串中的中文与空格
js 如何过滤字符串里中文或空格呢?方法有很多种,我们可以使用替换与正则表达式来实现,本文向大家介绍两个简单的例子,感兴趣的码农可以参考一下. 1.javascript过滤空格: function m ...
- jdk线程的死锁
两个线程相互等着对方释放同步监听器:等着要对方的结果后才能继续执行就会发生死锁. 男对女说:你先嫁给我,我再给你买房子:女对男说:你先给我买房子,我再嫁给你. 多个线程同时锁住同一个监听对象. 在开发 ...
- Android系统下检测Wifi连接互联网是否正常的代码
/** * * 判断网络状态是否可用 * * @return true: 网络可用 ; false: 网络不可用 */ public boolean isConnectInternet ...
- jmeter随笔(23)--在csv中维护变量参数
点击标题下「蓝色微信名」可快速关注 坚持的是分享,搬运的是知识,图的是大家的进步,没有收费的培训,没有虚度的吹水,喜欢就关注.转发(免费帮助更多伙伴)等来交流,想了解的知识请留言,给你带来更多价值,是 ...