最近我接到一个开发任务,要求就“售后服务客户满意度调查问卷表”里客户填写的反馈答案作一个统计。javascript
问题的例子以下:html
。。。java
我要实现的功能是出一个报表,在同一个页面显示对于每一个问题,每一个答案的总共出现次数。git
我实现了一个简单的效果,以下图所示:github
固然六个图标用的都是如出一辙的测试数据,主要解决了多个图表出如今同一个页面里的布局问题。canvas
你们用下面这个连接测试下效果。用Chrome开发者工具便可查看093_chart.html的实现。函数
http://i042416.github.io/FioriODataTestTool2014/WebContent/093_chart.html工具
手机上打开的效果。布局
简单过一下代码:测试
两个div里各包含了6个canvas。第一个div负责用6个饼状图来显示问题的结果,第二个div里的6个canvas则显示柱状图。每一个canvas我用了标注成!important的display:inline属性,来强制让这些位于canvas节点里的统计图从左到右显示,而不是默认的每显示一个就换行。
function loaded(){ var totalWidth = getBodyNode().clientWidth; console.log("width in load: " + totalWidth); var aCharts = document.getElementsByTagName("canvas"); for( var i = 0; i < aCharts.length; i++){ aCharts[i].width = totalWidth / 6.5; } var option = { type: "pie", xAxisData: ["Red", "Blue", "Yellow", "Green", "Purple", "Orange"], yAxisData: [12, 19, 3, 5, 2, 3], yAxisLabel: "Number of Votes" }; for( var i = 1; i <= 6; i++ ){ createChartOnCanvas("myChart" + i, option); } option.type = "bar"; for( var i = 1; i <= 6; i++ ){ createChartOnCanvas("barChart" + i, option); } }
第41行把当前窗口总的宽度经过body节点的clientWidth属性来得到,而后除以6.5,商即为每一个统计图的宽度。之因此除以6.5而不除以6是为了给每一行的统计图之间预留一些空隙。
统计图的类型,X和Y坐标的数据和标签经过option对象传入到函数createChartOnCanvas中。
要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码: