CompactBox 紧凑树
上一篇
ComboCombined 复合布局
下一篇
Concentric 同心圆布局
Loading...
紧凑树布局适用于结构化树形数据的展示,基于经典的 Reingold–Tilford tidy 布局算法 演进而来,通过布局时综合考虑每个树节点的包围盒,有效保持树结构的紧凑性与层次清晰。参考更多 CompactBox 布局样例和源码
const graph = new Graph({layout: {type: 'compact-box',direction: 'LR',getHeight: () => 16,getWidth: () => 16,getVGap: () => 16,getHGap: () => 40,},});
属性 | 描述 | 类型 | 默认值 | 必选 |
---|---|---|---|---|
type | 布局类型 | compact-box | - | ✓ |
direction | 布局方向,可选值 | LR | RL | TB | BT | H | V | LR | |
getSide | 设置节点排布在根节点的左侧/右侧,如未设置,则算法自动分配左侧/右侧。注意:该参数仅在 H 布局方向上生效 | (d?: NodeData) => string | ||
getId | 节点 id 的回调函数 | (d?: NodeData) => string | ||
getWidth | 计算每个节点的宽度 | (d?: NodeData) => number | ||
getHeight | 计算每个节点的高度 | (d?: NodeData) => number | ||
getHGap | 计算每个节点的水平间隙 | (d?: NodeData) => number | ||
getVGap | 计算每个节点的垂直间隙 | (d?: NodeData) => number | ||
radial | 是否启用辐射状布局,说明 | boolean | false |
LR
|RL
|TB
|BT
|H
|V
Default:LR
树布局方向
TB
:根节点在上,往下布局
BT
:根节点在下,往上布局
LR
:根节点在左,往右布局
RL
:根节点在右,往左布局
H
:根节点在中间,水平对称布局。可传入 getSide
方法指定每个节点的左右分布逻辑
V
:根节点在中间,垂直对称布局
(d?: NodeData) => string
设置节点排布在根节点的左侧/右侧。注意:该参数仅在 direction
为 H
时生效。如未设置,会默认将子节点前半部分放置在右侧,后半部分放置在左侧,参考 getSide自动计算逻辑。
示例:
(d) => {// d 是一个节点if (d.id === 'test-child-id') return 'right';return 'left';};
(d?: NodeData) => string
节点 id 的回调函数
示例:
(d) => {// d 是一个节点return d.id + '_node';};
(d?: NodeData) => number
每个节点的宽度
示例:
(d) => {// d 是一个节点if (d.id === 'testId') return 50;return 100;};
(d?: NodeData) => number
每个节点的高度
示例:
(d) => {// d 是一个节点if (d.id === 'testId') return 50;return 100;};
(d?: NodeData) => number
每个节点的水平间隙
示例:
(d) => {// d 是一个节点if (d.id === 'testId') return 50;return 100;};
(d?: NodeData) => number
每个节点的垂直间隙
示例:
(d) => {// d 是一个节点if (d.id === 'testId') return 50;return 100;};
boolean
是否按照辐射状布局。若 radial
为 true
,建议 direction
设置为 'LR'
或 'RL'