在本篇博文中,我们将继续Component源码解读,我将主要介绍各Component的渲染过程以及其使用的zrender graphic。希望和小伙伴们一起进步呀!!加油!!
前言
echarts对Component的定义呢,可以认为是除Series外的其他配置项,在这篇博文中我们将探讨datazoom(区域缩放)、visualMap(视图映射)、tooltip(提示框组件)、toolbox(工具栏)、brush(区域选择组件)、timeline(时间轴)、graphic(原生图形组件)、dataset(数据集)、marker(包括markPoint(图标标注)、markLine(图表标线)、markArea(图表标域))这些Component。
用户通过传递option对象来设置相应的Component。
区域缩放 DataZoom
dataZoom分为inside和slider两种类型
公共文件
DataZoomModel
DataZoomModel通过extendComponentModel扩展自Component Model,重写了defaultOption属性以及init、mergeOption等方法。
DataZoomView
DataZoomView通过extend扩展自Component View,重写了render方法并定义了getTargetCoordInfo方法。
DataZoomAction
DataZoomAction中注册了dataZoom action
Slider
SliderZoomModel
SliderZoomModel通过extend扩展自DataZoomModel,重写了defaultOption属性
SliderZoomView
SliderZoomView通过extend扩展自DataZoomView,重写了render、remove、dispose等方法,主要实现代码如下:
1 | render: function (dataZoomModel, ecModel, api, payload) { |
Inside
InsideZoomModel
InsideZoomModel通过extend扩展自DataZoomModel,重写了defaultOption属性。
InsideZoomView
InsideZoomView通过extend扩展自DataZoomView,重写了init、render、dispose等方法,主要实现代码如下:
1 | render: function (dataZoomModel, ecModel, api, payload) { |
视图映射 VisualMap
VisualMap分为continuous连续型及piecewise分段型两个类型
公共文件
VisualMapAction
VisualMapAction中注册了selectDataRange action
VisualMapModel
VisualMapModel通过extendComponentModel方法扩展自Component Model,重写了defaultOption属性以及init、optionUpdated等方法,并定义了resetVisual、formatValueText等方法。
VisualMapView
VisualMapView通过extendComponentView方法扩展自Component View,重写了init、render等方法,定义了renderBackground方法,主要代码为:
1 | render: function (visualMapModel, ecModel, api, payload) { |
Continuous
ContinuousModel
ContinuousModel通过extend方法扩展自VisualMapModel,重写了defaultOption属性以及optionUpdated、resetItemSize等方法,并定义了completeVisualOption、setSelected、getSelected、getValueState等方法。
ContinuousView
ContinuousView通过extend方法扩展自VisualMapView,重写了init方法并定义了doRender方法,主要代码如下:
1 | doRender: function (visualMapModel, ecModel, api, payload) { |
Piecewise
PiecewiseModel
PiecewiseModel通过extend方法扩展自VisualMapModel,重写了defaultOption属性以及optionUpdated等方法,并定义了getPieceList、getValueState、findTargetDataIndices等方法
PiecewiseView
PiecewiseView通过extend方法扩展自VisualMapView,定义了doRender方法,主要代码如下:
1 | doRender: function () { |
提示框 Tooltip
Tooltip.js
Tooltip.js中注册了showTip及hideTip action,trigger处理器调用TooltipView中定义的manuallyShowTip及manuallyHideTip方法。代码如下:
1 | echarts.registerAction( |
TooltipModel
TooltipModel通过extendComponentModel扩展自Component Model,重写了defaultOption属性。
TooltipView
TooltipView通过extendComponentView扩展自Component View,重写了init、render等方法,并定义了manuallyShowTip、manuallyHideTip等方法,主要代码如下:
1 | init: function (ecModel, api) { |
工具栏 Toolbox
ToolboxModel
ToolboxModel通过extendComponentModel方法扩展自Component Model,重写了defaultOption属性以及optionUpdated方法(merge feature下的option)
ToolboxView
ToolboxView通过extendComponentView扩展自Component View,重写了render、remove以及dispose等方法,并定义了updateView方法(调用feature下的updateView)。主要代码如下:
1 | render: function (toolboxModel, ecModel, api, payload) { |
Feature
featureManager中定义了注册以及获取feature的方法,实现代码如下:
1 | export function register(name, ctor) { |
SaveAsImage
SaveAsImage(保存为图片)定义了defaultOption属性以及onclick事件处理器,主要代码如下:
1 | var proto = SaveAsImage.prototype; |
MagicType
MagicType(动态类型切换)定义了defaultOption属性,以及getIcons、onclick方法,并注册了changeMagicType action,主要代码如下:
1 | var proto = MagicType.prototype; |
DataView
DataView(数据视图工具)定义了defaultOption属性及onclick、remove、dispose方法,并注册了changeDataView action,主要代码如下:
1 | DataView.prototype.onclick = function (ecModel, api) { |
DataZoom
DataZoom(数据区域缩放)设置defaultOption属性,定义了render、onclick、remove以及dispose等方法。主要代码如下:
1 | proto.render = function (featureModel, ecModel, api, payload) { |
Restore
Restore(配置项还原)定义了defaultOption属性以及onclick方法,并注册了restore action,主要代码如下:
1 | var proto = Restore.prototype; |
Brush
brush(选框组件的控制按钮)定义了defaultOption属性以及onclick、updateView、getIcons等方法,主要代码如下:
1 | var proto = Brush.prototype; |
区域选择组件 Brush
BrushModel
BrushModel通过extendComponentModel方法扩展自Component Model,重写了defaultOption属性以及optionUpdated方法,并定义了setAreas、setBrushOption等方法。
BrushView
BrushView通过extendComponentView方法扩展自Component View,重写了init、render、dispose等方法,主要代码如下:
1 | init: function (ecModel, api) { |
BrushAction
BrushAction注册了brush、brushSelect等action
Brush.js
Brush.js即toolbox中Brush的内容
时间轴 Timeline
默认为slider类型
TimelineAction
TimelineAction注册了timelineChange、timelinePlayChange等action
TimelineModel
TimelineModel通过extend方法扩展自Component Model,重写了defaultOption属性以及init方法,并定义了setCurrentIndex、getCurrentIndex、 setPlayState、getPlayState等方法
TimelineView
TimelineView通过extend方法扩展自Component Model。
SliderTimelineModel
SliderTimelineModel通过extend方法扩展自TimelineModel,重写了defaultOption属性
SliderTimelineView
SliderTimelineView通过extend方法扩展自TimelineView,重写了init、render方法,主要代码如下:
1 | render: function (timelineModel, ecModel, api, payload) { |
原生图形组件 Graphic
graphic.js
graphic.js文件中定义了GraphicModel以及GraphicView
GraphicModel
GraphicModel通过extendComponentModel扩展自Component Model,重写了defaultOption属性以及mergeOption、optionUpdated等方法
GraphicView
GraphicView通过extendComponentView扩展自Component View,重写了init、render方法。主要代码如下:
1 | render: function (graphicModel, ecModel, api) { |
数据集 Dataset
dataset
dataset中定义了Model&View
- Model: 通过extend方法扩展自Component Model,重写了defaultOption属性以及optionUpdated方法
- View: 通过extend方法扩展自Component View
图表标识 Marker
公共文件
MarkerModel
MarkerModel通过extendComponentModel方法扩展自Component Model,重写了init、mergeOption、formatTooltip、getData及setData等方法
MarkerView
MarkerView通过extendComponentView方法扩展自Component View,重写了init、render等方法并定义了renderSeries方法(子类中重写),主要代码如下:
1 | render: function (markerModel, ecModel, api) { |
图表标线 MarkLine
MarkLineModel
MarkLineModel通过extend方法扩展自MarkerModel,重写了defaultOption属性
MarkLineView
MarkLineView通过extend方法扩展自MarkerView,重写了renderSeries方法,主要代码如下:
1 | renderSeries: function (seriesModel, mlModel, ecModel, api) { |
图标标注 MarkPoint
MarkPointModel
MarkPointModel通过extend方法扩展自MarkerModel,重写了defaultOption属性
MarkPointView
MarkPointView通过extend方法扩展自MarkerView,重写了renderSeries方法,主要代码如下:
1 | renderSeries: function (seriesModel, mpModel, ecModel, api) { |
图表标域 MarkArea
MarkAreaModel
MarkAreaModel通过extend方法扩展自MarkerModel,重写了defaultOption属性
MarkAreaView
MarkAreaView通过extend方法扩展自MarkerView,重写了renderSeries方法,主要代码如下:
1 | renderSeries: function (seriesModel, maModel, ecModel, api) { |
总结
这篇博文简单介绍了DataZoom、VisualMap、Tooltip、Toolbox、Brush、Timeline、Graphic以及Marker等组件的渲染细节,到这里我们对于Echarts组件的渲染分析已经告一段落了,接下来我们将进入Series即图表的渲染过程分析阶段。
希望能够跟小伙伴们一起进步呀!继续加油!!