本文介绍如何利用RGraph插件结合HTML5 Canvas元素,在客户端直接绘制动态仪表盘,从而减轻服务器负担并提升渲染速度。文章详细讲解了Gauge对象的创建参数、多指针设置方法及浏览器兼容性,提供了完整的代码示例与离线查看的优势分析。
HTML5 Canvas与RGraph插件优势
目前统计图的制作方法众多,既可以使用快逸报表自带的统计图功能,也能通过自定义统计图进行个性化定制。此外,随着HTML5标准的更新,新增了一个关键元素——canvas。利用该元素,开发者可以在网页中直接绘制各种复杂图形。相较于以往依赖服务器端控件生成统计图的方式,使用canvas绘制具有显著优势:绘图工作完全在客户端执行,无需占用服务器资源,同时能充分利用客户端计算机的性能,大幅提升绘制速度。此外,控制canvas绘制的脚本代码支持压缩(如使用Apache服务器时,mod_gzip可自动执行压缩)和缓存,从而大幅降低带宽占用。本文即将介绍的插件正是基于这一原理设计的。试想,若服务器每天需为客户端访问生成100,000幅统计图,这将造成巨大的资源消耗。
本文介绍的RGraph插件能够有效解决上述资源占用问题。使用该插件制作统计图时,所有绘图工作均在客户端完成,类似于HTML网页的渲染过程。服务器仅需负责发送数据,不再参与统计图的生成与传输,从而将服务器资源占用降至接近零,并显著改善带宽使用情况。
由于统计图由JavaScript生成,用户在查看包含统计图的HTML网页时,即使处于离线状态,图表依然可以正常显示。目前,该插件已获得Firebox 4、Google Chrome 10、Opera 11、Safari 5以及IE9等浏览器的支持。
官方网站地址为:http://www.rgraph.net/examples/index.html !
RGraph仪表盘实现与代码示例
本文将演示如何实现仪表盘功能,包含三个不同样式的仪表盘,具体效果如下:

用户可以自定义头部内容(如“java小强”标题)及其样式,同时也能设置底部内容(如“cuisuqiang@163.com”)及其样式。
在创建第一个和第三个仪表盘时,代码示例如下:
var gauge1 = new RGraph.Gauge('cvs1', 0, 100, 84); var gauge3 = new RGraph.Gauge('cvs3', -100, 100, 84);
上述代码中,参数分别代表绘图所在的Canvas元素ID、最小值、最大值以及当前值。其中,第二个仪表盘(gauge2)的参数设置略有不同。
var gauge2 = new RGraph.Gauge('cvs2', 0, 200, [184,12]);
由于该仪表盘支持双指针显示,因此当前值参数需要以数组形式传递。
若希望绘制包含三个指针的仪表盘,实现方法同样简单,只需传递包含三个数值的数组作为当前值参数即可。
以下是整个页面的完整源代码,运行后将显示上述效果:
<html>
<head>
<title>Examples of the Gauge chart</title>
<script src="RGraph.common.core.js" ></script>
<script src="RGraph.common.effects.js" ></script>
<script src="RGraph.common.dynamic.js" ></script>
<script src="RGraph.gauge.js" ></script>
<script src="excanvas.js"></script>
<script>
window.onload = function () {
var gauge1 = new RGraph.Gauge('cvs1', 0, 100, 84);
gauge1.Set('chart.scale.decimals', 0);
gauge1.Set('chart.tickmarks.small', 50);
gauge1.Set('chart.tickmarks.big',5);
gauge1.Set('chart.title.top', 'Java小强');
gauge1.Set('chart.title.top.size', 24);
gauge1.Set('chart.title.bottom', 'cuisuqiang@163.com');
gauge1.Set('chart.title.bottom.color', '#aaa');
gauge1.Draw();
function Updategauge () {
gauge1.value=RGraph.random(5,90);
RGraph.Effects.Gauge.Grow(gauge1);
setTimeout(Updategauge, 2000);
}
Updategauge();
var gauge2 = new RGraph.Gauge('cvs2', 0, 200, [184,12,58]);
gauge2.Set('chart.title.top', 'Java小强');
gauge2.Set('chart.title.bottom.size', 'Italic 14'); // Hmmmm
gauge2.Set('chart.title.bottom.font', 'Impact');
gauge2.Set('chart.title.bottom.color', '#ccc');
gauge2.Set('chart.title.bottom', 'cuisuqiang@163.com');
gauge2.Set('chart.title.bottom.pos', 0.4);
gauge2.Set('chart.background.color', 'black');
gauge2.Set('chart.background.gradient', true);
gauge2.Set('chart.centerpin.color', '#666');
gauge2.Set('chart.needle.colors', [RGraph.RadialGradient(gauge2, 125, 125, 0, 125, 125, 25, 'transparent', 'white'),
RGraph.RadialGradient(gauge2, 125, 125, 0, 125, 125, 25, 'transparent', '#d66')]);
gauge2.Set('chart.needle.size', [null, 50]);
gauge2.Set('chart.text.color', 'white');
gauge2.Set('chart.tickmarks.big.color', 'white');
gauge2.Set('chart.tickmarks.medium.color', 'white');
gauge2.Set('chart.tickmarks.small.color', 'white');
gauge2.Set('chart.border.outer', '#666');
gauge2.Set('chart.border.inner', '#333');
gauge2.Set('chart.colors.ranges', []);
gauge2.Draw();
function Updategauge2 () {
gauge2.value = [RGraph.random(2,190), RGraph.random(5,195), RGraph.random(5,195)]
RGraph.Effects.Gauge.Grow(gauge2);
setTimeout(Updategauge2, 2000);
}
Updategauge2();
var gauge3 = new RGraph.Gauge('cvs3', -100, 100, 84);
gauge3.Set('chart.scale.decimals', 0);
gauge3.Set('chart.tickmarks.small', 50);
gauge3.Set('chart.tickmarks.big',5);
gauge3.Set('chart.title.top', 'Java小强');
gauge3.Set('chart.title.top.size', 24);
gauge3.Set('chart.title.bottom', 'cuisuqiang@163.com');
gauge3.Set('chart.title.bottom.color', '#aaa');
gauge3.Set('chart.colors.ranges', [[-100, -90, 'red'], [-90, -80, 'yellow'], [80, 90, 'yellow'], [90, 100, 'red']]);
gauge3.Set('chart.adjustable', true);
gauge3.Draw();
function Updategauge3 () {
gauge3.value = RGraph.random(2,99);
RGraph.Effects.Gauge.Grow(gauge3);
setTimeout(Updategauge3, 2000);
}
Updategauge3();
}
</script>
</head>
<body>
<div style="text-align: center">
<canvas id="cvs1" width="250" height="250">[No canvas support]</canvas>
<canvas id="cvs2" width="250" height="250">[No canvas support]</canvas>
<canvas id="cvs3" width="250" height="250">[No canvas support]</canvas>
</div>
</body>
</html>
浏览器兼容性与注意事项
建议使用Firebox浏览器查看效果,虽然IE浏览器也能显示基本效果,但在进行动态指针更新时,可能会导致浏览器运行缓慢甚至无响应。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。