神马系饼图?

饼图,大家都应该熟知,在统计数据对比方面,几乎处处用到。如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画饼图!的更多相关文章

  1. 浅谈HTML5单页面架构(二)——backbone + requirejs + zepto + underscore

    本文转载自:http://www.cnblogs.com/kenkofox/p/4648472.html 上一篇<浅谈HTML5单页面架构(一)--requirejs + angular + a ...

  2. 浅谈html5网页内嵌视频

    更好的阅读体验:浅谈html5网页内嵌视频 如今在这个特殊的时代下:flash将死未死,微软和IE的历史问题,html5标准未定,苹果和谷歌的闭源和开源之争,移动互联网的大势所趋,浏览器各自为战... ...

  3. AngularJS进阶(二十五)requirejs + angular + angular-route 浅谈HTML5单页面架构

    requirejs + angular + angular-route 浅谈HTML5单页面架构 众所周知,现在移动Webapp越来越多,例如天猫.京东.国美这些都是很好的例子.而在Webapp中,又 ...

  4. 浅谈html5 video 移动端填坑记

    这篇文章主要介绍了浅谈html5 video 移动端填坑记,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 本文介绍了html5 video 移动端填坑记,分享给大家,具体 ...

  5. 浅谈HTML5单页面架构(一)——requirejs + angular + angular-route

    心血来潮,打算结合实际开发的经验,浅谈一下HTML5单页面App或网页的架构. 众所周知,现在移动Webapp越来越多,例如天猫.京东.国美这些都是很好的例子.而在Webapp中,又要数单页面架构体验 ...

  6. 浅谈html5 响应式布局

    一.什么是响应式布局? 响应式布局是Ethan Marcotte在2010年5月份提出的一个概念,简而言之,就是一个网站能够兼容多个终端——而不是为每个终端做一个特定的版本. 这个概念是为解决移动互联 ...

  7. 浅谈html5及其新特性

    什么是 HTML5? HTML5 将成为 HTML.XHTML 以及 HTML DOM 的新标准. HTML 的上一个版本诞生于 1999 年.自从那以后,Web 世界已经经历了巨变. HTML5 仍 ...

  8. 使用css3画饼图

    CSS3 Gradient介绍参考地址: http://www.cnblogs.com/lhb25/archive/2013/01/30/css3-linear-gradient.html http: ...

  9. 浅谈HTML5中canvas中的beginPath()和closePath()的重要性

    beginPath的作用很简单,就是开始一段新的路径,但在使用canvas绘图的过程中却非常重要 先来看一小段代码: var ctx=document.getElementById("can ...

随机推荐

  1. 页面设计--Tree目录树

    Tree目录树控件属性: 根据数据集合来配置相应的信息 加载模式有自动加载.自定加载 web中显示效果图:

  2. java的重载

    1.java的重载三种:参数类型不同,构成重载,参数类型不同:::::参数顺序不同构成重载::::::参数个数不同,构成重载

  3. RequireJS API

    可以找到许多的解读,但是原文总是最重要的,也是最正宗的说明,直接访问 RequireJS 有时不太方便,这里将 RequireJS 2.0 API 的原文转载到博客园,方便查看. This is th ...

  4. Laxcus大数据管理系统2.0(14)- 后记

    后记 Laxcus最早源于一个失败的搜索引擎项目,项目最后虽然终止了,但是项目中的部分技术,包括FIXP协议.Diffuse/Converge算法.以及很多新的数据处理理念却得以保留下来,这些成为后来 ...

  5. POJ2001-Shortest Prefixes-Trie树应用

    沉迷WOW又颓了两天orz,暴雪爸爸要在国服出月卡了...这是要我好好学习吗?赶紧来刷题了... OJ:http://poj.org/problem?id=2001 题目大意是求所有字符串里每一个字符 ...

  6. OpenJudge 取数游戏

    描述 我们来玩一个游戏:自然数1到N,按顺序列成一排,你可以从中取走任意个数,但是相邻的两个不可以同时被取走.如果你能算出一共有多少种取法,那么你会被天神Lijiganjun奖励. 输入 仅包含一个数 ...

  7. 操作笔记:tomcat在正式环境

    1,一台服务器有两个容器,比如:jetty,tomcat. 出现问题: jetty启动的时候,tomcat就不能启动了. 此时,需要修改tomcat的配置文件:servler.xml <?xml ...

  8. android 控件描边取消重叠

    今天写组件的时候用到了描边.可是两个组件放在一起时,描边会变重叠,使之变粗.就不是很美观了. 如何取消呢?网上查了好久没找到,然后就自己试了试,找到了解决方法,就在此记录一下,防止以后忘记. 很简单分 ...

  9. mjrefresh源码分析

    最近想自己写个下拉刷新的库,但是始终感觉无从下手,想想总是容易的.原理也很简单,真正要下手写的时候,呵呵.不得不说ios封装得很好,网上可以用的成熟的库也很多,也正是因为如此很多开发者也忽略了很多底层 ...

  10. js中字符串,数字之间转换的常用方法

    var number={ num:, num1:"2你好" }; //将数字转换为字符串 var str=number.num.toString();//十进制 );//二进制 ) ...