diff --git a/example/line-chart.html b/example/line-chart.html index b1d802a37..28017e3bf 100644 --- a/example/line-chart.html +++ b/example/line-chart.html @@ -15,45 +15,54 @@ var LineChart = Nuclear.createCanvas({ render: function () { - var option = this.option,canvas=this.canvas, ctx = this.ctx; + var canvas = this.canvas, option = this.option, + offset = [option.offset[0], option.offset[1]], + xLen = option.xValueGrid.length, + yLen = option.yValueGrid.length, + cellHeight = Math.ceil((canvas.height - offset[1]) / yLen), + cellWidth = Math.ceil((canvas.width - offset[0]) / xLen), + bottom = offset[1] + cellHeight * (yLen - 1); + this.renderGird(offset, xLen, yLen, cellWidth, cellHeight, bottom); + this.renderData(cellWidth, bottom); + + }, + renderGird: function (offset, xLen, yLen, cellWidth, cellHeight, bottom) { + var option = this.option, canvas = this.canvas, ctx = this.ctx; ctx.strokeStyle = option.gridBoderColor, ctx.fillStyle = option.gridFontColor, ctx.lineWidth = 2; - var offset = [option.offset[0], option.offset[1]], - s = option.yValueGrid.length, - o = option.xValueGrid.length, - u = Math.ceil((canvas.height - offset[1]) / s), - a = Math.ceil((canvas.width - offset[0]) / o), - f = offset[0] + a * (o - 1), - l = offset[1] + u * (s - 1); - ctx.fillStyle = option.fontColor, - ctx.beginPath(), + var f = offset[0] + cellWidth * (xLen - 1); + ctx.fillStyle = option.fontColor; ctx.fillText(option.yUnit, offset[0] - 22, offset[1] - 15); + ctx.beginPath(); - for (var c = 0; c < s; c++) { + + for (var c = 0; c < yLen; c++) { ctx.moveTo(offset[0], offset[1]), - ctx.fillText(option.yValueGrid[s - c - 1], offset[0] - 22, offset[1] + 5), + ctx.fillText(option.yValueGrid[yLen - c - 1], offset[0] - 22, offset[1] + 5), ctx.lineTo(f, offset[1]), - offset[1] += u; + offset[1] += cellHeight; } offset = [option.offset[0], option.offset[1]]; - for (var c = 0; c < o; c++) { + for (var c = 0; c < xLen; c++) { ctx.moveTo(offset[0], offset[1]), - ctx.fillText(option.xValueGrid[c] + option.xUnit, offset[0] - 10, l + 15), - ctx.lineTo(offset[0], l), - offset[0] += a; + ctx.fillText(option.xValueGrid[c] + option.xUnit, offset[0] - 10, bottom + 15), + ctx.lineTo(offset[0], bottom), + offset[0] += cellWidth; } ctx.stroke(); - + }, + renderData: function (cellWidth, bottom) { + var option = this.option,ctx=this.ctx; var h = option.yValueGrid[option.yValueGrid.length - 1] - option.yValueGrid[0]; offset = [option.offset[0], option.offset[1]]; for (var c = 0, p = option.lines.length; c < p; c++) { var d = option.lines[c]; ctx.strokeStyle = d.lineColor, ctx.beginPath(); - for (var v = 0, m = d.data.length - 1; v < m; v++) ctx.moveTo(offset[0] + a * v, l - (l - offset[0]) * d.data[v] / h), - ctx.lineTo(offset[0] + a * (v + 1), l - (l - offset[0]) * d.data[v + 1] / h); + for (var v = 0, m = d.data.length - 1; v < m; v++) ctx.moveTo(offset[0] + cellWidth * v, bottom - (bottom - offset[0]) * d.data[v] / h), + ctx.lineTo(offset[0] + cellWidth * (v + 1), bottom - (bottom - offset[0]) * d.data[v + 1] / h); ctx.stroke() } @@ -62,8 +71,8 @@ var d = option.lines[c]; ctx.strokeStyle = d.lineColor; for (var v = 0, m = d.data.length; v < m; v++) { - var g = offset[0] + a * v, - y = l - (l - offset[0]) * d.data[v] / h; + var g = offset[0] + cellWidth * v, + y = bottom - (bottom - offset[0]) * d.data[v] / h; ctx.beginPath(), ctx.lineWidth = 3, ctx.arc(g, y, 4, 0, Math.PI * 2, !1), @@ -75,7 +84,6 @@ v === m - 1 && (ctx.fillText(d.data[v], g + 10, y + 10)) } } - } }) @@ -83,7 +91,7 @@ var lineChart=new LineChart("#lcContainer", 600, 300, { offset:[40,40], fontColor:"white", - gridBoderColor: "white", + gridBoderColor: "#ccc", gridFontColor: "black", yValueGrid: [0, 50, 100, 150, 200, 250, 300], yUnit: "万元/㎡",