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)

相关推荐

  • 抖音刷粉会被限流吗,抖音刷粉有什么影响?

    技术抖音刷粉会被限流吗,抖音刷粉有什么影响?抖音的爆火引发了新的产业链的产生,点开百度输入关键词抖音上热门涨粉等等,就会出现很多的机构打着上热门,涨粉的这种幌子,制定出各种诱人的套餐,对抖音进行刷量,刷赞,换句话说只要你

    测评 2021年11月10日
  • rabbitmq Hash冲突和一致性相关问题举例分析

    技术rabbitmq Hash冲突和一致性相关问题举例分析这篇文章主要介绍“rabbitmq Hash冲突和一致性相关问题举例分析”,在日常操作中,相信很多人在rabbitmq Hash冲突和一致性相关问题举例分析问题上

    攻略 2021年11月19日
  • 肝癌的早期症状和前兆,肝癌初期会有几种小毛病

    技术肝癌的早期症状和前兆,肝癌初期会有几种小毛病肝癌早期的症状并不典型,多数都是消化系统常见的主要症状肝癌的早期症状和前兆。一般来讲可以表现为早饱、反酸、嗳气、腹胀、纳差等表现。而且这些表现也不是特异性的表现,常常以为是

    生活 2021年10月23日
  • 感觉拼音,如果让你用拼音来写QQ空间的日志

    技术感觉拼音,如果让你用拼音来写QQ空间的日志估计真要用汉语拼音写日志感觉拼音,汉语拼音创始人,17世纪的法国(也算比利时)传教士金尼格也能看懂吧。
    中国自己的拼音第一人卢戆章却未必能看懂(他一直擅长拼音闽南语)
    方言是

    生活 2021年10月20日
  • vscodepython翻译插件(vscode中好用的中文翻译插件)

    技术如何开发一个vscode百度翻译插件本篇文章给大家分享的是有关如何开发一个vscode百度翻译插件,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。每次给元

    攻略 2021年12月13日
  • 整流桥KBP307-ASEMI如何测量好坏之电阻测试法

    技术整流桥KBP307-ASEMI如何测量好坏之电阻测试法 整流桥KBP307-ASEMI如何测量好坏之电阻测试法编辑-Z
    测量整流桥好坏的方法一般有两种,一种是电阻测试法,一种是压降测试法。整流桥KB

    礼包 2021年10月27日