【dunhuangmi原创,转载注明】 highcharts(http://www.highcharts.com/)是一款功能强大的绘图插件,基于VML和SVG开发,基本可以能兼容所有的浏览器。在它基础上可以开发柱状图、折线图、饼图等各种统计图表,并且效果绚丽。
本文只是一个简单的应用示例,希望可以帮助大家缩短学习highcharts的时间。
项目需求是实现如下效果的统计饼图,鼠标移到不同的扇区上时页面其他区域会相应产生变化,如果数据有变化可以实时重绘。
开发这样一个页面,我们需要知道以下几点:1、绘图数据源的格式和引用方法;2、饼图及注释显示的颜色、大小等样式设定;3、事件绑定的方式和接口调用方法;4、图象重绘方法
我的demo页面设计如下:
下面来跟我学习如何做出这个页面:
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>画饼图Highcharts Pie Demo</title> <style> ul,li{margin:0;padding:0;list-style:none} ul{width:400px;border:1px solid #e5e5e5;overflow:hidden} li{float:left;width:400px;line-height:25px;font-size:14px;padding:3px 10px} li.selected{background:#e5e5e5} p{margin:10px 0 0;font-size:14px;line-height:25px;} #container{width: 450px; height: 250px;background:#f5f2ec;padding:10px} .optbox{font-size:14px;padding-top:10px;} input[type="text"]{width:20px} </style> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script> <script src="http://code.highcharts.com/highcharts.js"></script> <script src="http://code.highcharts.com/modules/exporting.js"></script> </head> <body> <div id="container"></div> <p>当前选中的分类:</p> <ul> <li class="type1">有帮助的人</li> <li class="type2">同行</li> <li class="type3">有趣的人</li> <li class="type4">其他</li> </ul> <p>你也可以重画图形:</p> <div class="optbox">有帮助的人:<input type="text" value="20" id="num1"/>%, 同行:<input type="text" value="13" id="num2"/>%,有趣的人:<input type="text" value="30" id="num3"/>%,其他:<span id="num4">37</span>%<input type="button" value="重画" onclick="redrawchart()"/></div> </body> </html>
很简单,不解释。
script部分(注意注释)
<script type="text/javascript"> var chart1=null; var dataArray= [ ['有帮助的人',26.5], [ '同行', 25.5], [ '有趣的人',40], [ '其他',8] ]; $(function () { $(document).ready(function() { chart1 = new Highcharts.Chart({ colors:['#46cbee', '#fec157', '#e57244', '#cfd17d', '#24CBE5', '#64E572', '#FF9655', '#FFF263', '#6AF9C4'] ,//不同组数据的显示背景色,循环引用 chart: { renderTo: 'container',//画布所在的div id plotBackgroundColor: '#f5f2ec',//画布背景色 plotBorderWidth: null,//画布边框 plotShadow: false, margin:[0,0,0,0]//画布外边框 }, title: { text: ''//画布题目,此处置空 }, tooltip: { enabled:false,//去掉浮动提示框 shared:true }, plotOptions: { pie: { allowPointSelect: true, cursor: 'pointer', size:'90%', dataLabels: { enabled: true, color: '#666666', connectorWidth: 0, distance: 3, connectorColor: '#666666', style:{fontSize:'12px',fontWeight:'normal'}, formatter: function() { return this.point.name+ this.percentage +' %'; } }, events: { click: function(e) { //有需要时可写事件代码 }, mouseOver:function(){ //有需要时可写事件代码 }, mouseOut:function(){ //有需要时可写事件代码 } }, point: { events: { click: function(e) { this.slice(false); if ( e && e.stopPropagation )//禁止事件冒泡 e.stopPropagation(); else window.event.cancelBubble = true; return false; }, mouseOver: function(evt){ this.slice(false);//禁止选中扇形滑开 $('li').removeClass('selected'); switch (this.name) { case '有帮助的人': $('.type1').toggleClass("selected"); break; case '同行': $('.type2').toggleClass("selected"); break; case '有趣的人': $('.type3').toggleClass("selected"); break; case '其他': $('.type4').toggleClass("selected"); } }, mouseOut: function(evt){ //有需要时可写事件代码 } } } } }, exporting: { buttons: { exportButton: { enabled:false //不显示导出icon }, printButton: { enabled:false //不显示打印icon } } }, credits:{ enabled:false//不显示highcharts网址 }, series: [{ type: 'pie', name: '有关联系人分类', data: dataArray }] }); }); $('input[type="text"]').blur(function(){ $('#num4').html(100-parseInt($('#num1').val())-parseInt($('#num2').val())-parseInt($('#num3').val())); var num4=100-parseInt($('#num1').val())-parseInt($('#num2').val())-parseInt($('#num3').val()); if(num4<0){ alert('各分类数字加总不得大于100'); } }); $('input[type="text"]').keyup(function(){ $('#num4').html(100-parseInt($('#num1').val())-parseInt($('#num2').val())-parseInt($('#num3').val())); }); }); function redrawchart(){ var sumnow=parseInt($('#num1').val())+parseInt($('#num2').val())+parseInt($('#num3').val())+parseInt($('#num4').html()); if (sumnow!=100) { alert('请重新调整各分类项,使其和能够等于100'); return; } dataArray=[ ['有帮助的人',parseInt($('#num1').val())], [ '同行', parseInt($('#num2').val())], [ '有趣的人',parseInt($('#num3').val())], ['其他',parseInt($('#num4').html())] ]; this.chart1.series[0].setData(dataArray); this.chart1.series[0].redraw(); } </script>
dataArray是全局变量,存放用于绘图的数据。
Highcharts.Chart对象的各种属性如何使用都有详细注释,redraw()方法用来重绘。缺省显示的打印icon,导出icon,各种标题、注释、页脚都可以去掉,用法见代码。
饼图的事件绑定方法是难点。我们注意到,一个饼图有两层事件,一层绑定在pie的events上,但这层事件并不给出饼图的名称、序号,无法判断当前选定的是哪个饼图,第二层事件绑定在pie之point对象上,point的属性不仅有当前点的位置信息,还包含了当前点所属饼图的名称,可以根据名称来进行我们需要的dom操作。为了使point的click()代码奏效,我还加上了停止冒泡代码,防止click事件冒泡到pie的click事件上去,引起默认操作。
奉上highcharts的手册http://api.highcharts.com/highcharts,作为勘误依据。
最后强烈 推荐另一个绘图插件,拉斐尔raphael.js(http://www.raphaeljs.com),它更加简单、小巧,再开发也不困难,比highcharts更适合互联网使用。
本文源代码见http://dunhuang.a67.cnaaa1.com/html5/pietest.htm【dunhuangmi原创】
发表评论
-
timeline时间线的实现方法
2013-04-09 18:24 3838facebook,人人网都推出了“时间线”或叫“时间轴”, ... -
JavaScript之Function和function简单区分
2013-03-15 17:58 671var a = new Function("do ... -
转:如何优化JavaScript脚本的性能
2013-03-11 21:46 696循环 循环是很常用的 ... -
移动平台前端开发要点(二)
2013-01-16 14:25 10691. viewport:也就是可视 ... -
移动平台前端开发要点
2013-01-16 14:16 1048移动平台前端开发是指 ... -
在window环境中安装node.js
2013-01-04 11:29 930[dunhuangmi原创]大名鼎鼎的node.js是个jav ... -
[HTML5系列实践之二]用HTML5做音频播放器
2012-12-14 16:07 1842【dunhuangmi原创】这篇用HTML5做个循环播放歌曲的 ... -
mouseover和mouseout的BUG
2012-12-10 18:06 2772dunhuangmi的话:记得还是生手时面过某知名公司,题目之 ... -
[HTML5系列实践之一]用HTML5做动态饼图
2012-12-08 23:08 2756注:原创文章,转载注明原作者为dunhuangmi。 ... -
区分PC还是移动设备useragent的javascript代码
2012-05-25 15:53 1629判断useragent是来自普通pc,还是来自移动设备。普通p ...
相关推荐
本文实例讲述了jQuery插件HighCharts绘制2D饼图效果。分享给大家供大家参考,具体如下: 1、实例代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>HighCharts 2D...
Highcharts是一款广泛应用于Web开发的数据可视化插件,它允许开发者用JavaScript轻松创建各种高质量的图表,包括折线图、柱状图、饼图等。在SVG(可缩放矢量图形)和jQuery的支持下,Highcharts能实现动态数据呈现,...
主要介绍了jQuery插件HighCharts实现的2D对数饼图效果,结合实例形式分析了jQuery图形插件HighCharts绘制2D对数饼图的具体实现步骤与相关操作技巧,并附带demo源码供读者下载参考,需要的朋友可以参考下
在本项目中,“数据统计-图形化展示-HighCharts插件”是利用HighCharts的功能来实现数据的动态轮换展示,即统计图会自动进行切换,以呈现多角度的数据分析结果。 首先,我们需要了解HighCharts的基本用法。...
例如,你可以用JQuery选择器找到图表容器,然后创建Highcharts实例: ```javascript $(document).ready(function() { $('#container').highcharts({ // 配置项... }); }); ``` 总的来说,Highcharts是一个强大...
例如,你可以用`Highcharts.Renderer`对象绘制自定义图形,或者查找社区提供的插件增强功能。 六、实际案例分析 本实例详解源文件包含了多个实际的图表制作例子,涵盖了不同类型的图表和配置选项的使用。通过阅读...
"highcharts报表控件"和"jquery报表插件"指的是使用Highcharts与jQuery结合,为网页构建动态、丰富的数据报表。 Highcharts支持多种图表类型,包括标题中提到的"饼图"和"柱形图",以及其他如线图、面积图、散点图、...
Highcharts还支持丰富的插件,这些插件可以扩展其核心功能,比如数据列的动态加载、地图绘制、工具提示增强等。这些插件让开发者能够定制更复杂、更个性化的图表,满足不同项目的需求。 在实际应用中,使用...
- "examples"很可能是包含多个Highcharts实例的代码示例目录,开发者可以通过这些例子学习如何使用Highcharts的各种功能。 - "js"目录可能包含了Highcharts的核心库文件和其他必要的JavaScript资源,如jQuery库或者...
Highcharts支持多种图表类型,包括折线图、柱状图、饼图、散点图、面积图、甘特图等,适用于各种数据展示需求。其API和配置选项丰富,允许开发者自定义颜色、样式、交互行为以及数据加载方式,以满足不同项目的设计...
2. 插件绑定:通过`$.fn.highcharts()`方法,将Highcharts实例绑定到元素上,如`$("#chartContainer").highcharts(options)`。 3. 动态更新:使用`series.addPoint()`或`chart.update()`方法动态添加或更新数据,...
本主题主要关注“统计图插件及代码实例”,将深入探讨如何使用这些插件来创建各种类型的统计图,如折线图、饼图和柱状图,以有效地展示和理解数据。 首先,我们来了解一下什么是统计图插件。统计图插件是软件或Web...
本压缩包“jQuery highcharts实时更新数据的图表插件源码.zip”包含了使用jQuery和Highcharts实现动态更新图表的示例代码,适用于需要实时展示数据变化的应用场景。 首先,了解jQuery是至关重要的。jQuery是一个轻...
主要介绍了jQuery插件HighCharts绘制2D带有Legend的饼图效果,结合实例形式分析了jQuery使用HighCharts绘制带明细显示的饼状图效果实现技巧,并附带了demo源码供读者下载参考,需要的朋友可以参考下
4. **初始化Highcharts对象**:使用传递的`data`和`options`来配置Highcharts的`Chart`实例。 ```javascript var chart = Highcharts.chart(container, { series: data, // 其他配置项... }); ``` 5. **处理配置...
HighCharts是一款广泛应用于Web开发中的JavaScript图表库,它能够帮助开发者轻松创建各种动态、交互式的图表,如柱状图、折线图、饼图、散点图等。本篇文章将详细解析HighCharts的使用方法以及其API接口,帮助开发者...
在本实例中,我们将详细探讨如何使用jQuery插件HighCharts来绘制2D柱状图、折线图和饼图的组合图。这将帮助我们以视觉化的方式展示数据,比如在销售报告中显示各天的销售额以及它们的平均值,并通过饼图展示销售比例...
Highcharts是一款广泛应用于Web开发中的JavaScript图表库,它允许开发者轻松地在网页上创建各种交互式的图表,如折线图、柱状图、饼图、散点图等。这个"Highcharts生成图表所需源码包"包含了两个核心文件:...