效果图:
<!doctype>
<html>
<head>
<title>bring your charts to life</title>
<script type="text/javascript">
// chart sample data
var arrvisitors = new array();
arrvisitors[0] = "2007, 750";
arrvisitors[1] = "2008, 425";
arrvisitors[2] = "2009, 960";
arrvisitors[3] = "2010, 700";
arrvisitors[4] = "2011, 800";
arrvisitors[5] = "2012, 975";
arrvisitors[6] = "2013, 375";
arrvisitors[7] = "2014, 775";
var canvas;
var context;
// chart properties
var cwidth, cheight, cmargin, cspace;
var cmarginspace, cmarginheight;
// bar properties
var bwidth, bmargin, totalbars, maxdatavalue;
var bwidthmargin;
// bar animation
var ctr, numctr, speed;
// axis property
var totlabelsonyaxis;
// barchart constructor
function barchart() {
canvas = document.getelementbyid('bchart');
if (canvas && canvas.getcontext) {
context = canvas.getcontext('2d');
}
chartsettings();
drawaxislabelmarkers();
drawchartwithanimation();
}
// initialize the chart and bar values
function chartsettings() {
// chart properties
cmargin = 25;
cspace = 60;
cheight = canvas.height - 2 * cmargin - cspace;
cwidth = canvas.width - 2 * cmargin - cspace;
cmarginspace = cmargin + cspace;
cmarginheight = cmargin + cheight;
// bar properties
bmargin = 15;
totalbars = arrvisitors.length;
bwidth = (cwidth / totalbars) - bmargin;
// find maximum value to plot on chart
maxdatavalue = 0;
for (var i = 0; i < totalbars; i++) {
var arrval = arrvisitors[i].split(",");
var barval = parseint(arrval[1]);
if (parseint(barval) > parseint(maxdatavalue))
maxdatavalue = barval;
}
totlabelsonyaxis = 10;
context.font = "10pt garamond";
// initialize animation variables
ctr = 0;
numctr = 100;
speed = 10;
}
// draw chart axis, labels and markers
function drawaxislabelmarkers() {
context.linewidth = "2.0";
// draw y axis
drawaxis(cmarginspace, cmarginheight, cmarginspace, cmargin);
// draw x axis
drawaxis(cmarginspace, cmarginheight, cmarginspace + cwidth, cmarginheight);
context.linewidth = "1.0";
drawmarkers();
}
// draw x and y axis
function drawaxis(x, y, x, y) {
context.beginpath();
context.moveto(x, y);
context.lineto(x, y);
context.closepath();
context.stroke();
}
// draw chart markers on x and y axis
function drawmarkers() {
var nummarkers = parseint(maxdatavalue / totlabelsonyaxis);
context.textalign = "right";
context.fillstyle = "#000";;
// y axis
for (var i = 0; i <= totlabelsonyaxis; i++) {
markerval = i * nummarkers;
markervalht = i * nummarkers * cheight;
var xmarkers = cmarginspace - 5;
var ymarkers = cmarginheight - (markervalht / maxdatavalue);
context.filltext(markerval, xmarkers, ymarkers, cspace);
}
// x axis
context.textalign = 'center';
for (var i = 0; i < totalbars; i++) {
arrval = arrvisitors[i].split(",");
name = arrval[0];
markerxpos = cmarginspace + bmargin
+ (i * (bwidth + bmargin)) + (bwidth/2);
markerypos = cmarginheight + 10;
context.filltext(name, markerxpos, markerypos, bwidth);
}
context.save();
// add y axis title
context.translate(cmargin + 10, cheight / 2);
context.rotate(math.pi * -90 / 180);
context.filltext('visitors in thousands', 0, 0);
context.restore();
// add x axis title
context.filltext('year wise', cmarginspace +
(cwidth / 2), cmarginheight + 30 );
}
function drawchartwithanimation() {
// loop through the total bars and draw
for (var i = 0; i < totalbars; i++) {
var arrval = arrvisitors[i].split(",");
bval = parseint(arrval[1]);
bht = (bval * cheight / maxdatavalue) / numctr * ctr;
bx = cmarginspace + (i * (bwidth + bmargin)) + bmargin;
by = cmarginheight - bht - 2;
drawrectangle(bx, by, bwidth, bht, true);
}
// timeout runs and checks if bars have reached
// the desired height; if not, keep growing
if (ctr < numctr) {
ctr = ctr + 1;
settimeout(arguments.callee, speed);
}
}
function drawrectangle(x, y, w, h, fill) {
context.beginpath();
context.rect(x, y, w, h);
context.closepath();
context.stroke();
if (fill) {
var gradient = context.createlineargradient(0, 0, 0, 300);
gradient.addcolorstop(0, 'green');
gradient.addcolorstop(1, 'rgba(67,203,36,.15)');
context.fillstyle = gradient;
context.strokestyle = gradient;
context.fill();
}
}
</script>
<noscript>
this chart is unavailable because javascript is disabled on your computer. please enable
javascript and refresh this page to see the chart in action.
</noscript>
</head>
<body onload="barchart();">
<canvas id="bchart" height="400" width="600">your browser does not support html5 canvas
</canvas>
</body>
</html>
相关文章:
html5生成柱状图(条形图)效果的实例代码
使用html实现简单的柱状图效果
以上就是使用html5 canvas画柱状图的详细内容。