# zrender

# 概述

文件路径:src/zrender.js

zrender 是外部引用 zrender 的模块名称,该模块总共 export 了下面几个方法变量:

export function init() {}
export function dispose() {}
export function getInstance() {}
export function registerPainter() {}

zrender 的核心入口是 Zrender 类, 但并没有直接的 export Zrender 类 而是通过模块的 init 方法实例化, zrender.js 中有一个 instances 变量,保存了页面生存周期中的所有实例;需要全局的来增加或删除实例,因此增加了两个方法, initdispose

# 方法

# 初始化 init

不对外公布 Zrender 类,而是使用 init 方法实例化对象,可以将实例直接保存到全局变量 intstances

// src/zrender.js

export function init(dom, opts) {
    var zr = new ZRender(guid(), dom, opts);
    instances[zr.id] = zr;
    return zr;
}

eg.

var zr = zrender.init(document.getElementById('zrender_container'));

# 销毁 dispose

全局的销毁方法,传入实例的话,可以通过实例的销毁方法销毁实例。如果不传实例,会销毁掉全局变量中保存的所有实例

// src/zrender.js

export function dispose(zr) {
    if (zr) {
        zr.dispose();
    }
    else {
        for (var key in instances) {
            if (instances.hasOwnProperty(key)) {
                instances[key].dispose();
            }
        }
        instances = {};
    }
    return this;
}

eg.

zrender.dispose(zr);

# 获取实例 getInstance

前提是知道 id

export function getInstance(id) {
    return instances[id];
}

# 注册绘图工具 registerPainter

默认的是 canvas, zrender 会在最外层注册 svg 和 vml

export function registerPainter(name, Ctor) {
    painterCtors[name] = Ctor;
}