diff --git a/src/component/categoryAxis.js b/src/component/categoryAxis.js index 87f8877902b869a2108ead9a499924103f014d5a..1c2d4dd5b903211ee0870520721eb4f1b62ac61b 100644 --- a/src/component/categoryAxis.js +++ b/src/component/categoryAxis.js @@ -6,36 +6,37 @@ * */ define(function (require) { + var Base = require('./base'); + + // 图形依赖 var TextShape = require('zrender/shape/Text'); var LineShape = require('zrender/shape/Line'); var RectangleShape = require('zrender/shape/Rectangle'); + var ecConfig = require('../config'); + var zrUtil = require('zrender/tool/util'); + var zrArea = require('zrender/tool/area'); + /** * 构造函数 * @param {Object} messageCenter echart消息中心 * @param {ZRender} zr zrender实例 * @param {Object} option 类目轴参数 - * @param {Grid} grid 网格对象 + * @param {Grid} component 组件 */ - function CategoryAxis(ecConfig, messageCenter, zr, option, component) { - var Base = require('./base'); - Base.call(this, ecConfig, zr); - - var zrUtil = require('zrender/tool/util'); - var zrArea = require('zrender/tool/area'); - - var self = this; - self.type = ecConfig.COMPONENT_TYPE_AXIS_CATEGORY; - - var grid = component.grid; - - var _zlevelBase = self.getZlevelBase(); - var _interval; // 标签显示的挑选间隔 - var _labelData; - - function _reformLabel() { - var data = zrUtil.clone(option.data); - var axisFormatter = option.axisLabel.formatter; + function CategoryAxis(ecTheme, messageCenter, zr, option, component) { + Base.call(this, ecTheme, zr, option); + + this.grid = component.grid; + + this.init(option, this.grid); + } + + CategoryAxis.prototype = { + type : ecConfig.COMPONENT_TYPE_AXIS_CATEGORY, + _reformLabel : function () { + var data = zrUtil.clone(this.option.data); + var axisFormatter = this.option.axisLabel.formatter; var formatter; for (var i = 0, l = data.length; i < l; i++) { formatter = data[i].formatter || axisFormatter; @@ -61,24 +62,24 @@ define(function (require) { } } return data; - } + }, /** * 计算标签显示挑选间隔 */ - function _getInterval() { - var interval = option.axisLabel.interval; + _getInterval : function () { + var interval = this.option.axisLabel.interval; if (interval == 'auto') { // 麻烦的自适应计算 - var fontSize = option.axisLabel.textStyle.fontSize; - var font = self.getFont(option.axisLabel.textStyle); - var data = option.data; - var dataLength = option.data.length; + var fontSize = this.option.axisLabel.textStyle.fontSize; + var font = this.getFont(this.option.axisLabel.textStyle); + var data = this.option.data; + var dataLength = this.option.data.length; - if (option.position == 'bottom' || option.position == 'top') { + if (this.option.position == 'bottom' || this.option.position == 'top') { // 横向 if (dataLength > 3) { - var gap = getGap(); + var gap = this.getGap(); var isEnough = false; var labelSpace; var labelSize; @@ -88,24 +89,24 @@ define(function (require) { isEnough = true; labelSpace = gap * interval - 10; // 标签左右至少间隔为5px for (var i = 0; i < dataLength; i += interval) { - if (option.axisLabel.rotate !== 0) { + if (this.option.axisLabel.rotate !== 0) { // 有旋转 labelSize = fontSize; } else if (data[i].textStyle) { labelSize = zrArea.getTextWidth( - _labelData[i].value || _labelData[i], - self.getFont( + this._labelData[i].value || this._labelData[i], + this.getFont( zrUtil.merge( data[i].textStyle, - option.axisLabel.textStyle + this.option.axisLabel.textStyle ) ) ); } else { labelSize = zrArea.getTextWidth( - _labelData[i].value || _labelData[i], + this._labelData[i].value || this._labelData[i], font ); } @@ -126,7 +127,7 @@ define(function (require) { else { // 纵向 if (dataLength > 3) { - var gap = getGap(); + var gap = this.getGap(); interval = 1; // 标签上下至少间隔为3px while ((gap * interval - 6) < fontSize @@ -147,134 +148,137 @@ define(function (require) { } return interval; - } - - function _buildShape() { - _labelData = _reformLabel(); - _interval = _getInterval(); - option.splitArea.show && _buildSplitArea(); - option.splitLine.show && _buildSplitLine(); - option.axisLine.show && _buildAxisLine(); - option.axisTick.show && _buildAxisTick(); - option.axisLabel.show && _buildAxisLabel(); + }, - for (var i = 0, l = self.shapeList.length; i < l; i++) { - zr.addShape(self.shapeList[i]); + _buildShape : function () { + // 标签文字格式化 + this._labelData = this._reformLabel(); + // 标签显示的挑选间隔 + this._interval = this._getInterval(); + + this.option.splitArea.show && this._buildSplitArea(); + this.option.splitLine.show && this._buildSplitLine(); + this.option.axisLine.show && this._buildAxisLine(); + this.option.axisTick.show && this._buildAxisTick(); + this.option.axisLabel.show && this._buildAxisLabel(); + + for (var i = 0, l = this.shapeList.length; i < l; i++) { + this.zr.addShape(this.shapeList[i]); } - } + }, // 轴线 - function _buildAxisLine() { - var lineWidth = option.axisLine.lineStyle.width; + _buildAxisLine : function () { + var lineWidth = this.option.axisLine.lineStyle.width; var halfLineWidth = lineWidth / 2; var axShape = { shape : 'line', - zlevel : _zlevelBase + 1, + zlevel : this._zlevelBase + 1, hoverable : false }; - switch (option.position) { + switch (this.option.position) { case 'left' : axShape.style = { - xStart : grid.getX() - halfLineWidth, - yStart : grid.getYend() + halfLineWidth, - xEnd : grid.getX() - halfLineWidth, - yEnd : grid.getY() - halfLineWidth + xStart : this.grid.getX() - halfLineWidth, + yStart : this.grid.getYend() + halfLineWidth, + xEnd : this.grid.getX() - halfLineWidth, + yEnd : this.grid.getY() - halfLineWidth }; break; case 'right' : axShape.style = { - xStart : grid.getXend() + halfLineWidth, - yStart : grid.getYend() + halfLineWidth, - xEnd : grid.getXend() + halfLineWidth, - yEnd : grid.getY() - halfLineWidth + xStart : this.grid.getXend() + halfLineWidth, + yStart : this.grid.getYend() + halfLineWidth, + xEnd : this.grid.getXend() + halfLineWidth, + yEnd : this.grid.getY() - halfLineWidth }; break; case 'bottom' : axShape.style = { - xStart : grid.getX() - halfLineWidth, - yStart : grid.getYend() + halfLineWidth, - xEnd : grid.getXend() + halfLineWidth, - yEnd : grid.getYend() + halfLineWidth + xStart : this.grid.getX() - halfLineWidth, + yStart : this.grid.getYend() + halfLineWidth, + xEnd : this.grid.getXend() + halfLineWidth, + yEnd : this.grid.getYend() + halfLineWidth }; break; case 'top' : axShape.style = { - xStart : grid.getX() - halfLineWidth, - yStart : grid.getY() - halfLineWidth, - xEnd : grid.getXend() + halfLineWidth, - yEnd : grid.getY() - halfLineWidth + xStart : this.grid.getX() - halfLineWidth, + yStart : this.grid.getY() - halfLineWidth, + xEnd : this.grid.getXend() + halfLineWidth, + yEnd : this.grid.getY() - halfLineWidth }; break; } - if (option.name !== '') { - axShape.style.text = option.name; - axShape.style.textPosition = option.nameLocation; - axShape.style.textFont = self.getFont(option.nameTextStyle); - if (option.nameTextStyle.align) { - axShape.style.textAlign = option.nameTextStyle.align; + if (this.option.name !== '') { + axShape.style.text = this.option.name; + axShape.style.textPosition = this.option.nameLocation; + axShape.style.textFont = this.getFont(this.option.nameTextStyle); + if (this.option.nameTextStyle.align) { + axShape.style.textAlign = this.option.nameTextStyle.align; } - if (option.nameTextStyle.baseline) { - axShape.style.textBaseline = option.nameTextStyle.baseline; + if (this.option.nameTextStyle.baseline) { + axShape.style.textBaseline = this.option.nameTextStyle.baseline; } - if (option.nameTextStyle.color) { - axShape.style.textColor = option.nameTextStyle.color; + if (this.option.nameTextStyle.color) { + axShape.style.textColor = this.option.nameTextStyle.color; } } - axShape.style.strokeColor = option.axisLine.lineStyle.color; + axShape.style.strokeColor = this.option.axisLine.lineStyle.color; axShape.style.lineWidth = lineWidth; // 亚像素优化 - if (option.position == 'left' || option.position == 'right') { + if (this.option.position == 'left' || this.option.position == 'right') { // 纵向布局,优化x axShape.style.xStart = axShape.style.xEnd - = self.subPixelOptimize(axShape.style.xEnd, lineWidth); + = this.subPixelOptimize(axShape.style.xEnd, lineWidth); } else { // 横向布局,优化y axShape.style.yStart = axShape.style.yEnd - = self.subPixelOptimize(axShape.style.yEnd, lineWidth); + = this.subPixelOptimize(axShape.style.yEnd, lineWidth); } - axShape.style.lineType = option.axisLine.lineStyle.type; + axShape.style.lineType = this.option.axisLine.lineStyle.type; axShape = new LineShape(axShape); - self.shapeList.push(axShape); - } + this.shapeList.push(axShape); + }, // 小标记 - function _buildAxisTick() { + _buildAxisTick : function () { var axShape; - //var data = option.data; - var dataLength = option.data.length; - var tickOption = option.axisTick; + //var data = this.option.data; + var dataLength = this.option.data.length; + var tickOption = this.option.axisTick; var length = tickOption.length; var color = tickOption.lineStyle.color; var lineWidth = tickOption.lineStyle.width; var interval = tickOption.interval == 'auto' - ? _interval : (tickOption.interval - 0 + 1); + ? this._interval : (tickOption.interval - 0 + 1); var onGap = tickOption.onGap; var optGap = onGap - ? (getGap() / 2) + ? (this.getGap() / 2) : typeof onGap == 'undefined' - ? (option.boundaryGap ? (getGap() / 2) : 0) + ? (this.option.boundaryGap ? (this.getGap() / 2) : 0) : 0; var startIndex = optGap > 0 ? -interval : 0; - if (option.position == 'bottom' || option.position == 'top') { + if (this.option.position == 'bottom' || this.option.position == 'top') { // 横向 - var yPosition = option.position == 'bottom' - ? (tickOption.inside ? (grid.getYend() - length) : grid.getYend()) - : (tickOption.inside ? grid.getY() : (grid.getY() - length)); + var yPosition = this.option.position == 'bottom' + ? (tickOption.inside ? (this.grid.getYend() - length) : this.grid.getYend()) + : (tickOption.inside ? this.grid.getY() : (this.grid.getY() - length)); var x; for (var i = startIndex; i < dataLength; i += interval) { // 亚像素优化 - x = self.subPixelOptimize( - getCoordByIndex(i) + (i >= 0 ? optGap : 0), lineWidth + x = this.subPixelOptimize( + this.getCoordByIndex(i) + (i >= 0 ? optGap : 0), lineWidth ); axShape = { shape : 'line', - zlevel : _zlevelBase, + zlevel : this._zlevelBase, hoverable : false, style : { xStart : x, @@ -285,24 +289,24 @@ define(function (require) { lineWidth : lineWidth } }; - self.shapeList.push(new LineShape(axShape)); + this.shapeList.push(new LineShape(axShape)); } } else { // 纵向 - var xPosition = option.position == 'left' - ? (tickOption.inside ? grid.getX() : (grid.getX() - length)) - : (tickOption.inside ? (grid.getXend() - length) : grid.getXend()); + var xPosition = this.option.position == 'left' + ? (tickOption.inside ? this.grid.getX() : (this.grid.getX() - length)) + : (tickOption.inside ? (this.grid.getXend() - length) : this.grid.getXend()); var y; for (var i = startIndex; i < dataLength; i += interval) { // 亚像素优化 - y = self.subPixelOptimize( - getCoordByIndex(i) - (i >= 0 ? optGap : 0), lineWidth + y = this.subPixelOptimize( + this.getCoordByIndex(i) - (i >= 0 ? optGap : 0), lineWidth ); axShape = { shape : 'line', - zlevel : _zlevelBase, + zlevel : this._zlevelBase, hoverable : false, style : { xStart : xPosition, @@ -313,36 +317,36 @@ define(function (require) { lineWidth : lineWidth } }; - self.shapeList.push(new LineShape(axShape)); + this.shapeList.push(new LineShape(axShape)); } } - } + }, // 坐标轴文本 - function _buildAxisLabel() { + _buildAxisLabel : function () { var axShape; - var data = option.data; - var dataLength = option.data.length; - var rotate = option.axisLabel.rotate; - var margin = option.axisLabel.margin; - var textStyle = option.axisLabel.textStyle; + var data = this.option.data; + var dataLength = this.option.data.length; + var rotate = this.option.axisLabel.rotate; + var margin = this.option.axisLabel.margin; + var textStyle = this.option.axisLabel.textStyle; var dataTextStyle; - if (option.position == 'bottom' || option.position == 'top') { + if (this.option.position == 'bottom' || this.option.position == 'top') { // 横向 var yPosition; var baseLine; - if (option.position == 'bottom') { - yPosition = grid.getYend() + margin; + if (this.option.position == 'bottom') { + yPosition = this.grid.getYend() + margin; baseLine = 'top'; } else { - yPosition = grid.getY() - margin; + yPosition = this.grid.getY() - margin; baseLine = 'bottom'; } - for (var i = 0; i < dataLength; i += _interval) { - if ((_labelData[i].value || _labelData[i]) === '') { + for (var i = 0; i < dataLength; i += this._interval) { + if ((this._labelData[i].value || this._labelData[i]) === '') { // 空文本优化 continue; } @@ -352,23 +356,23 @@ define(function (require) { ); axShape = { shape : 'text', - zlevel : _zlevelBase, + zlevel : this._zlevelBase, hoverable : false, style : { - x : getCoordByIndex(i), + x : this.getCoordByIndex(i), y : yPosition, color : dataTextStyle.color, - text : _labelData[i].value || _labelData[i], - textFont : self.getFont(dataTextStyle), + text : this._labelData[i].value || this._labelData[i], + textFont : this.getFont(dataTextStyle), textAlign : 'center', textBaseline : baseLine } }; if (rotate) { axShape.style.textAlign = rotate > 0 - ? (option.position == 'bottom' + ? (this.option.position == 'bottom' ? 'right' : 'left') - : (option.position == 'bottom' + : (this.option.position == 'bottom' ? 'left' : 'right'); axShape.rotation = [ rotate * Math.PI / 180, @@ -376,24 +380,24 @@ define(function (require) { axShape.style.y ]; } - self.shapeList.push(new TextShape(axShape)); + this.shapeList.push(new TextShape(axShape)); } } else { // 纵向 var xPosition; var align; - if (option.position == 'left') { - xPosition = grid.getX() - margin; + if (this.option.position == 'left') { + xPosition = this.grid.getX() - margin; align = 'right'; } else { - xPosition = grid.getXend() + margin; + xPosition = this.grid.getXend() + margin; align = 'left'; } - for (var i = 0; i < dataLength; i += _interval) { - if ((_labelData[i].value || _labelData[i]) === '') { + for (var i = 0; i < dataLength; i += this._interval) { + if ((this._labelData[i].value || this._labelData[i]) === '') { // 空文本优化 continue; } @@ -403,19 +407,19 @@ define(function (require) { ); axShape = { shape : 'text', - zlevel : _zlevelBase, + zlevel : this._zlevelBase, hoverable : false, style : { x : xPosition, - y : getCoordByIndex(i), + y : this.getCoordByIndex(i), color : dataTextStyle.color, - text : _labelData[i].value || _labelData[i], - textFont : self.getFont(dataTextStyle), + text : this._labelData[i].value || this._labelData[i], + textFont : this.getFont(dataTextStyle), textAlign : align, - textBaseline : (i === 0 && option.name !== '') + textBaseline : (i === 0 && this.option.name !== '') ? 'bottom' : (i == (dataLength - 1) - && option.name !== '') + && this.option.name !== '') ? 'top' : 'middle' } @@ -428,16 +432,16 @@ define(function (require) { axShape.style.y ]; } - self.shapeList.push(new TextShape(axShape)); + this.shapeList.push(new TextShape(axShape)); } } - } + }, - function _buildSplitLine() { + _buildSplitLine : function () { var axShape; - //var data = option.data; - var dataLength = option.data.length; - var sLineOption = option.splitLine; + //var data = this.option.data; + var dataLength = this.option.data.length; + var sLineOption = this.option.splitLine; var lineType = sLineOption.lineStyle.type; var lineWidth = sLineOption.lineStyle.width; var color = sLineOption.lineStyle.color; @@ -446,160 +450,160 @@ define(function (require) { var onGap = sLineOption.onGap; var optGap = onGap - ? (getGap() / 2) + ? (this.getGap() / 2) : typeof onGap == 'undefined' - ? (option.boundaryGap ? (getGap() / 2) : 0) + ? (this.option.boundaryGap ? (this.getGap() / 2) : 0) : 0; - dataLength -= (onGap || (typeof onGap == 'undefined' && option.boundaryGap)) ? 1 : 0; - if (option.position == 'bottom' || option.position == 'top') { + dataLength -= (onGap || (typeof onGap == 'undefined' && this.option.boundaryGap)) ? 1 : 0; + if (this.option.position == 'bottom' || this.option.position == 'top') { // 横向 - var sy = grid.getY(); - var ey = grid.getYend(); + var sy = this.grid.getY(); + var ey = this.grid.getYend(); var x; - for (var i = 0; i < dataLength; i += _interval) { + for (var i = 0; i < dataLength; i += this._interval) { // 亚像素优化 - x = self.subPixelOptimize( - getCoordByIndex(i) + optGap, lineWidth + x = this.subPixelOptimize( + this.getCoordByIndex(i) + optGap, lineWidth ); axShape = { shape : 'line', - zlevel : _zlevelBase, + zlevel : this._zlevelBase, hoverable : false, style : { xStart : x, yStart : sy, xEnd : x, yEnd : ey, - strokeColor : color[(i / _interval) % colorLength], + strokeColor : color[(i / this._interval) % colorLength], lineType : lineType, lineWidth : lineWidth } }; - self.shapeList.push(new LineShape(axShape)); + this.shapeList.push(new LineShape(axShape)); } } else { // 纵向 - var sx = grid.getX(); - var ex = grid.getXend(); + var sx = this.grid.getX(); + var ex = this.grid.getXend(); var y; - for (var i = 0; i < dataLength; i += _interval) { + for (var i = 0; i < dataLength; i += this._interval) { // 亚像素优化 - y = self.subPixelOptimize( - getCoordByIndex(i) - optGap, lineWidth + y = this.subPixelOptimize( + this.getCoordByIndex(i) - optGap, lineWidth ); axShape = { shape : 'line', - zlevel : _zlevelBase, + zlevel : this._zlevelBase, hoverable : false, style : { xStart : sx, yStart : y, xEnd : ex, yEnd : y, - strokeColor : color[(i / _interval) % colorLength], + strokeColor : color[(i / this._interval) % colorLength], linetype : lineType, lineWidth : lineWidth } }; - self.shapeList.push(new LineShape(axShape)); + this.shapeList.push(new LineShape(axShape)); } } - } + }, - function _buildSplitArea() { + _buildSplitArea : function () { var axShape; - var sAreaOption = option.splitArea; + var sAreaOption = this.option.splitArea; var color = sAreaOption.areaStyle.color; if (!(color instanceof Array)) { // 非数组一律认为是单一颜色的字符串,单一颜色则用一个背景,颜色错误不负责啊!!! axShape = { shape : 'rectangle', - zlevel : _zlevelBase, + zlevel : this._zlevelBase, hoverable : false, style : { - x : grid.getX(), - y : grid.getY(), - width : grid.getWidth(), - height : grid.getHeight(), + x : this.grid.getX(), + y : this.grid.getY(), + width : this.grid.getWidth(), + height : this.grid.getHeight(), color : color - // type : option.splitArea.areaStyle.type, + // type : this.option.splitArea.areaStyle.type, } }; - self.shapeList.push(new RectangleShape(axShape)); + this.shapeList.push(new RectangleShape(axShape)); } else { // 多颜色 var colorLength = color.length; - var dataLength = option.data.length; + var dataLength = this.option.data.length; var onGap = sAreaOption.onGap; var optGap = onGap - ? (getGap() / 2) + ? (this.getGap() / 2) : typeof onGap == 'undefined' - ? (option.boundaryGap ? (getGap() / 2) : 0) + ? (this.option.boundaryGap ? (this.getGap() / 2) : 0) : 0; - if (option.position == 'bottom' || option.position == 'top') { + if (this.option.position == 'bottom' || this.option.position == 'top') { // 横向 - var y = grid.getY(); - var height = grid.getHeight(); - var lastX = grid.getX(); + var y = this.grid.getY(); + var height = this.grid.getHeight(); + var lastX = this.grid.getX(); var curX; - for (var i = 0; i <= dataLength; i += _interval) { + for (var i = 0; i <= dataLength; i += this._interval) { curX = i < dataLength - ? (getCoordByIndex(i) + optGap) - : grid.getXend(); + ? (this.getCoordByIndex(i) + optGap) + : this.grid.getXend(); axShape = { shape : 'rectangle', - zlevel : _zlevelBase, + zlevel : this._zlevelBase, hoverable : false, style : { x : lastX, y : y, width : curX - lastX, height : height, - color : color[(i / _interval) % colorLength] - // type : option.splitArea.areaStyle.type, + color : color[(i / this._interval) % colorLength] + // type : this.option.splitArea.areaStyle.type, } }; - self.shapeList.push(new RectangleShape(axShape)); + this.shapeList.push(new RectangleShape(axShape)); lastX = curX; } } else { // 纵向 - var x = grid.getX(); - var width = grid.getWidth(); - var lastYend = grid.getYend(); + var x = this.grid.getX(); + var width = this.grid.getWidth(); + var lastYend = this.grid.getYend(); var curY; - for (var i = 0; i <= dataLength; i += _interval) { + for (var i = 0; i <= dataLength; i += this._interval) { curY = i < dataLength - ? (getCoordByIndex(i) - optGap) - : grid.getY(); + ? (this.getCoordByIndex(i) - optGap) + : this.grid.getY(); axShape = { shape : 'rectangle', - zlevel : _zlevelBase, + zlevel : this._zlevelBase, hoverable : false, style : { x : x, y : curY, width : width, height : lastYend - curY, - color : color[(i / _interval) % colorLength] - // type : option.splitArea.areaStyle.type + color : color[(i / this._interval) % colorLength] + // type : this.option.splitArea.areaStyle.type } }; - self.shapeList.push(new RectangleShape(axShape)); + this.shapeList.push(new RectangleShape(axShape)); lastYend = curY; } } } - } + }, /** * 构造函数默认执行的初始化方法,也用于创建实例后动态修改 @@ -607,73 +611,73 @@ define(function (require) { * @param {Object} newOption * @param {Object} newGrid */ - function init(newOption, newGrid) { + init :function (newOption, newGrid) { if (newOption.data.length < 1) { return; } - grid = newGrid; + this.grid = newGrid; - refresh(newOption); - } + this.refresh(newOption); + }, /** * 刷新 */ - function refresh(newOption) { + refresh : function (newOption) { if (newOption) { - option = self.reformOption(newOption); + this.option = this.reformOption(newOption); // 通用字体设置 - option.axisLabel.textStyle = zrUtil.merge( - option.axisLabel.textStyle || {}, - ecConfig.textStyle + this.option.axisLabel.textStyle = zrUtil.merge( + this.option.axisLabel.textStyle || {}, + this.ecTheme.textStyle ); - option.axisLabel.textStyle = zrUtil.merge( - option.axisLabel.textStyle || {}, - ecConfig.textStyle + this.option.axisLabel.textStyle = zrUtil.merge( + this.option.axisLabel.textStyle || {}, + this.ecTheme.textStyle ); } - self.clear(); - _buildShape(); - } + this.clear(); + this._buildShape(); + }, /** * 返回间隔 */ - function getGap() { - var dataLength = option.data.length; - var total = (option.position == 'bottom' - || option.position == 'top') - ? grid.getWidth() - : grid.getHeight(); - if (option.boundaryGap) { // 留空 + getGap : function () { + var dataLength = this.option.data.length; + var total = (this.option.position == 'bottom' + || this.option.position == 'top') + ? this.grid.getWidth() + : this.grid.getHeight(); + if (this.option.boundaryGap) { // 留空 return total / dataLength; } else { // 顶头 return total / (dataLength > 1 ? (dataLength - 1) : 1); } - } + }, // 根据值换算位置 - function getCoord(value) { - var data = option.data; + getCoord : function (value) { + var data = this.option.data; var dataLength = data.length; - var gap = getGap(); - var position = option.boundaryGap ? (gap / 2) : 0; + var gap = this.getGap(); + var position = this.option.boundaryGap ? (gap / 2) : 0; for (var i = 0; i < dataLength; i++) { if (data[i] == value || (typeof data[i].value != 'undefined' && data[i].value == value) ) { - if (option.position == 'bottom' - || option.position == 'top' + if (this.option.position == 'bottom' + || this.option.position == 'top' ) { // 横向 - position = grid.getX() + position; + position = this.grid.getX() + position; } else { // 纵向 - position = grid.getYend() - position; + position = this.grid.getYend() - position; } return position; @@ -686,54 +690,54 @@ define(function (require) { } position += gap; } - } + }, // 根据类目轴数据索引换算位置 - function getCoordByIndex(dataIndex) { + getCoordByIndex : function (dataIndex) { if (dataIndex < 0) { - if (option.position == 'bottom' || option.position == 'top') { - return grid.getX(); + if (this.option.position == 'bottom' || this.option.position == 'top') { + return this.grid.getX(); } else { - return grid.getYend(); + return this.grid.getYend(); } } - else if (dataIndex > option.data.length - 1) { - if (option.position == 'bottom' || option.position == 'top') { - return grid.getXend(); + else if (dataIndex > this.option.data.length - 1) { + if (this.option.position == 'bottom' || this.option.position == 'top') { + return this.grid.getXend(); } else { - return grid.getY(); + return this.grid.getY(); } } else { - var gap = getGap(); - var position = option.boundaryGap ? (gap / 2) : 0; + var gap = this.getGap(); + var position = this.option.boundaryGap ? (gap / 2) : 0; position += dataIndex * gap; - if (option.position == 'bottom' - || option.position == 'top' + if (this.option.position == 'bottom' + || this.option.position == 'top' ) { // 横向 - position = grid.getX() + position; + position = this.grid.getX() + position; } else { // 纵向 - position = grid.getYend() - position; + position = this.grid.getYend() - position; } return position; /* 准确更重要 - return (dataIndex === 0 || dataIndex == option.data.length - 1) + return (dataIndex === 0 || dataIndex == this.option.data.length - 1) ? position : Math.floor(position); */ } - } + }, // 根据类目轴数据索引换算类目轴名称 - function getNameByIndex(dataIndex) { - var data = option.data[dataIndex]; + getNameByIndex : function (dataIndex) { + var data = this.option.data[dataIndex]; if (typeof data != 'undefined' && typeof data.value != 'undefined') { return data.value; @@ -741,11 +745,11 @@ define(function (require) { else { return data; } - } + }, // 根据类目轴名称换算类目轴数据索引 - function getIndexByName(name) { - var data = option.data; + getIndexByName : function (name) { + var data = this.option.data; var dataLength = data.length; for (var i = 0; i < dataLength; i++) { @@ -756,34 +760,24 @@ define(function (require) { return i; } } - } + }, /** * 根据类目轴数据索引返回是否为主轴线 * @param {number} dataIndex 类目轴数据索引 * @return {boolean} 是否为主轴 */ - function isMainAxis(dataIndex) { - return dataIndex % _interval === 0; - } + isMainAxis : function (dataIndex) { + return dataIndex % this._interval === 0; + }, - function getPosition() { - return option.position; + getPosition : function () { + return this.option.position; } - - self.init = init; - self.refresh = refresh; - self.getGap = getGap; - self.getCoord = getCoord; - self.getCoordByIndex = getCoordByIndex; - self.getNameByIndex = getNameByIndex; - self.getIndexByName = getIndexByName; - self.isMainAxis = isMainAxis; - self.getPosition = getPosition; - - init(option, grid); - } - + }; + + zrUtil.inherits(CategoryAxis, Base); + require('../component').define('categoryAxis', CategoryAxis); return CategoryAxis;