概述
本文档主要介绍在 G6 中如何使用 dom
元素 ,如有描述不清楚、有误的地方欢迎大家在 GitHub 上提 Issue 指正,或是直接 PR 修缮。根据您的贡献度,我们会视情况将您加入 AntV 共建者名录 :-)
准备工作
HTML 元素只有在为 svg
渲染引擎下生效。若您需要在 G6 中使用 HTML 元素,请先将渲染引擎设置为 svg
:
const graph = new G6.Graph({
renderer: 'svg'
});
绘制一个最简单的 dom 图形
G6.registerNode('customNode', {
draw(item){
const group = item.getGraphicGroup();
const html = G6.Util.createDOM('<div class="node">HTML 节点</div>');
return group.addShape('dom', {
attrs: {
x: 0,
y: 0,
width: 100,
height: 24,
html
}
});
}
});
元素事件
可以使用以下两种方式将事件绑定到 dom 元素上:
绑定在自定义的 dom 元素上
使用 graph 委托事件
graph.on('node:click', ev=>{
const { domEvent, item } = ev;
const { target } = domEvent;
if(target && target.dataset.text){
alert('捕获了一只'+target.dataset.text);
}
});
第一种方法是原生的 javascript 事件。在第二种方式中,需要注意的是,由于内部事件是根据数学运算求得的,而 node:click
的监听区域是根据 addShape()
时设置的尺寸进行运算的,所以这类事件的响应是不会超出 shape 的尺寸的。
复杂示例
使用 dom 元素,我们能基于 HTML 、CSS 的特性轻易制作表单类、列表类,并使用高文本处理复杂的 UI。另一方面,开发者有能力快速复用其它 Web 组建。
注意 : 对于简单图形上, dom 元素的性能远不如 canvas 。在大数据量场景下,应尽量避免使用 dom 元素。