123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- /**
- * echarts组件: 网格
- *
- * @desc echarts基于Canvas,纯Javascript图表库,提供直观,生动,可交互,可个性化定制的数据统计图表。
- * @author Kener (@Kener-林峰, kener.linfeng@gmail.com)
- *
- */
- define(function (require) {
- var Base = require('./base');
-
- // 图形依赖
- var RectangleShape = require('zrender/shape/Rectangle');
-
- var ecConfig = require('../config');
- // 网格
- ecConfig.grid = {
- zlevel: 0, // 一级层叠
- z: 0, // 二级层叠
- x: 80,
- y: 60,
- x2: 80,
- y2: 60,
- // width: {totalWidth} - x - x2,
- // height: {totalHeight} - y - y2,
- backgroundColor: 'rgba(0,0,0,0)',
- borderWidth: 1,
- borderColor: '#ccc'
- };
- var zrUtil = require('zrender/tool/util');
- /**
- * 构造函数
- * @param {Object} messageCenter echart消息中心
- * @param {ZRender} zr zrender实例
- * @param {Object} option 图表选项
- * @param {number=} option.grid.x 直角坐标系内绘图网格起始横坐标,数值单位px
- * @param {number=} option.grid.y 直角坐标系内绘图网格起始纵坐标,数值单位px
- * @param {number=} option.grid.width 直角坐标系内绘图网格宽度,数值单位px
- * @param {number=} option.grid.height 直角坐标系内绘图网格高度,数值单位px
- */
- function Grid(ecTheme, messageCenter, zr, option, myChart) {
- Base.call(this, ecTheme, messageCenter, zr, option, myChart);
- this.refresh(option);
- }
-
- Grid.prototype = {
- type: ecConfig.COMPONENT_TYPE_GRID,
- getX: function () {
- return this._x;
- },
- getY: function () {
- return this._y;
- },
- getWidth: function () {
- return this._width;
- },
- getHeight: function () {
- return this._height;
- },
- getXend: function () {
- return this._x + this._width;
- },
- getYend: function () {
- return this._y + this._height;
- },
- getArea: function () {
- return {
- x: this._x,
- y: this._y,
- width: this._width,
- height: this._height
- };
- },
-
- getBbox: function() {
- return [
- [ this._x, this._y ],
- [ this.getXend(), this.getYend() ]
- ];
- },
-
- /**
- * 实在找不到合适的地方做了,各种粗暴的写法~ -_-
- */
- refixAxisShape: function(component) {
- var zeroX;
- var zeroY;
- var axisList = component.xAxis._axisList.concat(
- component.yAxis ? component.yAxis._axisList : []
- );
- var len = axisList.length;
- var axis;
- while (len--) {
- axis = axisList[len];
- if (axis.type == ecConfig.COMPONENT_TYPE_AXIS_VALUE
- && axis._min < 0
- && axis._max >= 0
- ) {
- axis.isHorizontal()
- ? (zeroX = axis.getCoord(0))
- : (zeroY = axis.getCoord(0));
- }
- }
- if (typeof zeroX != 'undefined' || typeof zeroY != 'undefined') {
- len = axisList.length;
- while (len--) {
- axisList[len].refixAxisShape(zeroX, zeroY);
- }
- }
- },
-
- refresh: function (newOption) {
- if (newOption
- || this._zrWidth != this.zr.getWidth()
- || this._zrHeight != this.zr.getHeight()
- ) {
- this.clear();
- this.option = newOption || this.option;
- this.option.grid = this.reformOption(this.option.grid);
-
- var gridOption = this.option.grid;
- this._zrWidth = this.zr.getWidth();
- this._zrHeight = this.zr.getHeight();
- this._x = this.parsePercent(gridOption.x, this._zrWidth);
- this._y = this.parsePercent(gridOption.y, this._zrHeight);
- var x2 = this.parsePercent(gridOption.x2, this._zrWidth);
- var y2 = this.parsePercent(gridOption.y2, this._zrHeight);
-
-
- if (typeof gridOption.width == 'undefined') {
- this._width = this._zrWidth - this._x - x2;
- }
- else {
- this._width = this.parsePercent(gridOption.width, this._zrWidth);
- }
- this._width = this._width <= 0 ? 10 : this._width;
-
- if (typeof gridOption.height == 'undefined') {
- this._height = this._zrHeight - this._y - y2;
- }
- else {
- this._height = this.parsePercent(gridOption.height, this._zrHeight);
- }
- this._height = this._height <= 0 ? 10 : this._height;
-
- this._x = this.subPixelOptimize(this._x, gridOption.borderWidth);
- this._y = this.subPixelOptimize(this._y, gridOption.borderWidth);
-
- this.shapeList.push(new RectangleShape({
- zlevel: this.getZlevelBase(),
- z: this.getZBase(),
- hoverable: false,
- style: {
- x: this._x,
- y: this._y,
- width: this._width,
- height: this._height,
- brushType: gridOption.borderWidth > 0 ? 'both' : 'fill',
- color: gridOption.backgroundColor,
- strokeColor: gridOption.borderColor,
- lineWidth: gridOption.borderWidth
- // type: this.option.splitArea.areaStyle.type,
- }
- }));
- this.zr.addShape(this.shapeList[0]);
- }
- }
- };
-
- zrUtil.inherits(Grid, Base);
-
- require('../component').define('grid', Grid);
-
- return Grid;
- });
|