blob: 010e04979f5080486f6c5f4de1076508f9e2948e [file] [log] [blame]
/**
* echarts组件基类
*
* @desc echarts基于Canvas,纯Javascript图表库,提供直观,生动,可交互,可个性化定制的数据统计图表。
* @author Kener (@Kener-林峰, linzhifeng@baidu.com)
*
*/
define(function(require) {
function Base(zr, option){
var ecData = require('../util/ecData');
var accMath = require('../util/accMath');
var zrUtil = require('zrender/tool/util');
var self = this;
self.selectedMap = {};
self.shapeHandler = {
onclick : function() {
self.isClick = true;
},
ondragover : function (param) {
// 返回触发可计算特性的图形提示
var calculableShape = zrUtil.clone(param.target);
calculableShape.highlightStyle = {
text : '',
r : calculableShape.style.r + 5,
brushType : 'stroke',
strokeColor : option.calculableColor,//self.zr.getCalculableColor(),
lineWidth : (calculableShape.style.lineWidth || 1) + 12
};
self.zr.addHoverShape(calculableShape);
},
ondrop : function (param) {
// 排除一些非数据的拖拽进入
if (typeof ecData.get(param.dragged, 'data') != 'undefined') {
self.isDrop = true;
}
},
ondragend : function () {
self.isDragend = true;
}
};
function setCalculable(shape) {
shape.dragEnableTime = option.DRAG_ENABLE_TIME;
shape.ondragover = self.shapeHandler.ondragover;
shape.ondragend = self.shapeHandler.ondragend;
shape.ondrop = self.shapeHandler.ondrop;
return shape;
}
/**
* 数据项被拖拽进来
*/
function ondrop(param, status) {
if (!self.isDrop || !param.target) {
// 没有在当前实例上发生拖拽行为则直接返回
return;
}
var target = param.target; // 拖拽安放目标
var dragged = param.dragged; // 当前被拖拽的图形对象
var seriesIndex = ecData.get(target, 'seriesIndex');
var dataIndex = ecData.get(target, 'dataIndex');
// 落到数据item上,数据被拖拽到某个数据项上,数据修改
var data = option.series[seriesIndex].data[dataIndex] || '-';
if (data.value) {
if (data.value != '-') {
option.series[seriesIndex].data[dataIndex].value =
accMath.accAdd(
option.series[seriesIndex].data[dataIndex].value,
ecData.get(dragged, 'value')
);
}
else {
option.series[seriesIndex].data[dataIndex].value =
ecData.get(dragged, 'value');
}
}
else {
if (data != '-') {
option.series[seriesIndex].data[dataIndex] =
accMath.accAdd(
option.series[seriesIndex].data[dataIndex],
ecData.get(dragged, 'value')
);
}
else {
option.series[seriesIndex].data[dataIndex] =
ecData.get(dragged, 'value');
}
}
// 别status = {}赋值啊!!
status.dragIn = status.dragIn || true;
// 处理完拖拽事件后复位
self.isDrop = false;
return;
}
/**
* 数据项被拖拽出去
*/
function ondragend(param, status) {
if (!self.isDragend || !param.target) {
// 没有在当前实例上发生拖拽行为则直接返回
return;
}
var target = param.target; // 被拖拽图形元素
var seriesIndex = ecData.get(target, 'seriesIndex');
var dataIndex = ecData.get(target, 'dataIndex');
// 被拖拽的图形是折线图bar,删除被拖拽走的数据
option.series[seriesIndex].data[dataIndex] = '-';
// 别status = {}赋值啊!!
status.dragOut = true;
status.needRefresh = true;
// 处理完拖拽事件后复位
self.isDragend = false;
return;
}
/**
* 图例选择
*/
function onlegendSelected(param, status) {
var legendSelected = param.selected;
for (var itemName in self.selectedMap) {
if (self.selectedMap[itemName] != legendSelected[itemName]) {
// 有一项不一致都需要重绘
status.needRefresh = true;
}
self.selectedMap[itemName] = legendSelected[itemName];
}
return;
}
/**
* 基类方法
*/
self.setCalculable = setCalculable;
self.ondrop = ondrop;
self.ondragend = ondragend;
self.onlegendSelected = onlegendSelected;
}
return Base;
});