(转)浅谈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 ...
随机推荐
- POJ - 2533 Longest Ordered Subsequence(最长上升子序列)
d.最长上升子序列 s.注意是严格递增 c.O(nlogn) #include<iostream> #include<stdio.h> using namespace std; ...
- nyoj 54-小明的存钱计划
点击打开链接 小明的存钱计划 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 小明的零花钱一直都是自己管理.每个月的月初妈妈给小明300元钱,小明会预算这个月的花销,并且 ...
- js的传值,table中tr的遍历,js中动态创建数组
1.这里关键是对页面中的传值,其次是动态的创建一个数组,用来存值 $(val).css("background-color", "rgb(251, 248, 233)&q ...
- jad 反编译 jar包
1.利用winrar解压缩jar包 或者CMD>jar -xvf test.jar -C classes 2.下载jad,利用jad反编译jar包 CMD>[jad_home]/jad.e ...
- C#中如何判断联系电话的合法性
string tel = tb_tel.Text.Trim();//联系电话if (!string.IsNullOrEmpty(tb_tel.Text.Trim())){try{//num = Con ...
- JDBC链接MySQL和Oracle
import java.sql.*; JDBC中所要用的包几乎都在import?java.sql.*;中: 在项目中导入Oracel或者是MySQL包和装载驱动: 项目的Cla ...
- 多行文字垂直居中(完美兼容chrome firefox IE6 7 8 9)
在说到这个问题的时候,也许有人会问CSS中不是有vertical-align属性来设置垂直居中的吗?即使是某些浏览器不支持我只需做少许的CSS Hack技术就可以啊!所以在这里我还要啰嗦两句,CSS中 ...
- css定义表格样式
table.gridtable { font-family: verdana,arial,sans-serif; font-size:11px; color:#333333; border-width ...
- Java语法细节(2)
1.逻辑运算符 &和&&,|和||的区别 &&:和&的结果是一样的,但运算过程有区别 &&:只要左边结果为假,就不再执行右边的,结果为假 ...
- CSS3 Filter
Filters主要是运用在图片上,以实现一些特效.(尽管他们也能运用于video上),不过我们在些只来讨论图片上的运用. 语法: elm { filter: none | <filter-fun ...