概述

本文档主要介绍在 G6 中如何使用 dom 元素 ,如有描述不清楚、有误的地方欢迎大家在 GitHub 上提 Issue 指正,或是直接 PR 修缮。根据您的贡献度,我们会视情况将您加入 AntV 共建者名录 :-)

准备工作

HTML 元素只有在为 svg 渲染引擎下生效。若您需要在 G6 中使用 HTML 元素,请先将渲染引擎设置为 svg :

  1. const graph = new G6.Graph({
  2. renderer: 'svg'
  3. });

绘制一个最简单的 dom 图形

使用 dom 元素 - 图1
Demo 源码

  1. G6.registerNode('customNode', {
  2. draw(item){
  3. const group = item.getGraphicGroup();
  4. const html = G6.Util.createDOM('<div class="node">HTML 节点</div>');
  5. return group.addShape('dom', {
  6. attrs: {
  7. x: 0,
  8. y: 0,
  9. width: 100,
  10. height: 24,
  11. html
  12. }
  13. });
  14. }
  15. });

元素事件

可以使用以下两种方式将事件绑定到 dom 元素上:

  1. 绑定在自定义的 dom 元素上

  2. 使用 graph 委托事件

使用 dom 元素 - 图2

Demo 源码

  1. graph.on('node:click', ev=>{
  2. const { domEvent, item } = ev;
  3. const { target } = domEvent;
  4. if(target && target.dataset.text){
  5. alert('捕获了一只'+target.dataset.text);
  6. }
  7. });

第一种方法是原生的 javascript 事件。在第二种方式中,需要注意的是,由于内部事件是根据数学运算求得的,而 node:click 的监听区域是根据 addShape() 时设置的尺寸进行运算的,所以这类事件的响应是不会超出 shape 的尺寸的。

复杂示例

使用 dom 元素,我们能基于 HTML 、CSS 的特性轻易制作表单类、列表类,并使用高文本处理复杂的 UI。另一方面,开发者有能力快速复用其它 Web 组建。

注意 : 对于简单图形上, dom 元素的性能远不如 canvas 。在大数据量场景下,应尽量避免使用 dom 元素。

指标卡

使用 dom 元素 - 图3