Echarts 源码解读 一:zrender源码分析1var zr = zrender.init(document.getElementById(‘main‘));

技术Echarts 源码解读 一:zrender源码分析1var zr = zrender.init(document.getElementById(‘main‘)); Echarts 源码解读 一:z

Echarts源代码解读1: zrender源代码分析1 varzr=zerender . init(document . getelementbyid(' main '));

2021SC@SDUSC

因为echart是基于Zrendere实现的,所以在阅读echart的源代码之前,我们首先要对Zrendere有一个基本的了解。

Zrender是canvas的类库,zrender是基于canvas实现的。

目录

zrender的Src文件夹

文件夹:

动画动画相关

包含包含判断

核心代码,包括一些工具(util.js)、事件(event.js)、唯一ID(guid.js)、矩阵运算相关(matrix.js)等。

Dom dom事件相关

图形图形,在shape文件夹下是每个图形的js文件。

要在混合模式下混合的函数。

工具功能,包括颜色工具(color.js)、路径工具(path.js)和变换工具(transformPath.js)

vml IE中的画笔,由vml解释

全局文件:

Config.js配置文件

Element.js元素文件,作为zrender最基本的元素。

Handle.js C层,控制层

Layer.js层管理

画师. js V层,视图层

Storage.js M层,数据管理层

Zrender.js入口

Zrender整体架构

Zrender是用MVC封装的

m是模型数据层,V是视图层,C是控制器控制层:

存储(m):存储是zrender中的Model层,主要进行图形数据的增删查(CRUD)操作;

画师(v):画师是zrender中的View层,主要管理画布元素的生命周期,渲染视图,控制更新。定义了AddHover、setBackgroundColor等方法。

Handler (c): Handler是zrender中的Controller层,主要实现事件的交互处理和完整dom事件的模拟封装。

图表

在图形文件夹中,Zrendere为外部调用定义了一系列图形,包括圆形、矩形、心形、扇形、多边形、折线等。echarts可以通过调用Zrendere定义的图形来轻松渲染图表。

可显示

可显示的. js是路径、文本等的基类。它继承自Element,并定义了setStyle和useStyle等方法。

试验

从Displayable继承的文本调用helper/text.js中的renderText方法进行绘制。主要代码如下:

导出函数RenderText(House,ctx,Text,style,rect,previel){ 0

风格丰富

renderRichText(招待所,ctx,文本,样式,矩形,前一个)

: RenderBluetOoth(Houster,ctx,Text,style,rect,PRevel);

}

文本分为富文本和普通文本,分别呈现。它们都是通过调用canvas的api来呈现文本的,比如ctx.fillText或者ctx.strokeText,具体实现可以查看helper/text.js文件。

风格

图形样式文件,定义了基本的样式属性,以及样式设置、克隆和判断的方法。

小路

Path是图形的基类,继承自Displayable,定义了buildPath、getBoundingRect、setShape等方法。它包含这个。_Style属性,它是Style对象的实例。

形状

在形状文件下,有一个由zrender定义的图形文件,它是从Path扩展而来的。

通过调用Path.extend方法扩展的Circle重写了buildPath方法,buildPath调用了画布API: CTX。圆弧来画圆。主要实现代码如下:

buildPath:函数(ctx,shape,in bundle){ 0

if(Inbundle){ 0

ctx.moveTo(shape.cx shape.r,shape . cy);

}

ctx.arc(shape.cx,shape.cy,shape.r,0,Math。PI * 2,真);

}

入口(zrender.js)

初始化

调用初始化:

var Zr=zrender . init(document . getelementbyid(' main '));

源代码:输入init方法,a .初始化Zrender,b .将其存储在Zrender实例映射索引中。

Zrender初始化,不允许外部直接新建是为了提供全局控制和减少全局污染和命名冲突的风险。

var实例={ };//ZRender实例映射索引

var zrender={ };

zrender.init=function(dom,opts){ 0

var zr=new ZRender(guid(),dom,opts);

实例[Zr . id]=Zr;

返回Zr;

};

构造器

可以在构造器中看到MVC的管理机制。

//zrender.js

/**

* ZRender接口类,所有对外可用的接口都在这里!

* storage(M)、painter(V)和handler(C)是内部私有类,外部接口不可见。

*非get接口统一返回支持链式调用~

*

* @param {string} id唯一标识

* @param {HTMLElement} dom对象,不帮你做document.getElementById

*

* @返回ZRender实例

*/

函数ZRender(id,DOM){ 0

this.id=id

this.env=require(' ./tool/env’);//浏览器环境识别用

这个。存储=新存储();//形状数据凝乳管理

画家=新画家。存储);//可以花瓶元素生命周期管理,视图渲染,绘画,更新控制

this.handler=new Handler(dom,this.storage,this。画家);//事件交互处理,实现完整数字正射影像图事件模拟封装

//动画控制

这个。动画形状=[];

this.animation=新动画({ 0

舞台: {

更新: getAnimationUpdater(此)

}

});

这个。动画。start();

}

每次绘图前,都清空画布

//zrender_demo.html

锆。clear();

zrender执行清空时,清空仓库后,再执行油漆匠的清除()方法

//zrender.js

/**

* 清除当前ZRender下所有类图的数据和显示安全后手动音量调节和已绑定事件均还存在在,ZRender可用

*/

zrender。原型。clear=函数(){ 0

这个。存储。del();

这个。画家。clear();

归还这个;

};

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/117955.html

(0)

相关推荐

  • 如何将后端baas化(baas替代后端程序员)

    技术怎样将后端BaaS化怎样将后端BaaS化,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。BaaS 化的核心其实就是把我们的后端应用封装成 RESTfu

    攻略 2021年12月21日
  • 如何理解Elasticsearch倒排索引与分词

    技术如何理解Elasticsearch倒排索引与分词本篇内容主要讲解“如何理解Elasticsearch倒排索引与分词”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解E

    攻略 2021年10月23日
  • MySQL怎么进行批量更新和删除数据shell脚本

    技术MySQL怎么进行批量更新和删除数据shell脚本MySQL怎么进行批量更新和删除数据shell脚本,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。#

    攻略 2021年10月29日
  • 家具品牌排行榜,全国十大名牌家具的排名

    技术家具品牌排行榜,全国十大名牌家具的排名网上复制的家具品牌排行榜,希望对你有用啊,呵呵。 中国十大木地板品牌排行榜: 01,圣象地板(中国驰名商标,中国名牌)圣象集团; 02,盈彬大自然(中国名牌,国家免检产品)佛山

    生活 2021年10月28日
  • BGP协议的广域网流量调度SDN控制器怎样在银行业部署实践

    技术BGP协议的广域网流量调度SDN控制器怎样在银行业部署实践本篇文章为大家展示了BGP协议的广域网流量调度SDN控制器怎样在银行业部署实践,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有

    攻略 2021年10月29日
  • Python与C++引用的示例分析

    技术Python与C++引用的示例分析本篇文章给大家分享的是有关Python与C++引用的示例分析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在用Pyth

    攻略 2021年10月25日