logo

X6

  • 文档
  • API
  • 图表示例
  • 常见问题
  • 更新日志
  • XFlow
  • 所有产品antv logo arrow
  • 2.x
  • 画布
    • 画布
    • 网格
    • 背景
    • 画布平移
    • 画布缩放
    • 视口变换
    • 坐标系
  • 元素
    • 元素
    • 节点
    • 边
    • 标签
    • 箭头
    • 元素属性
    • 交互
  • MVC
    • 模型
    • 视图
  • 扩展
    • 节点工具
    • 边上工具
    • 路由
    • 连接器
    • 节点的锚点
    • 边的锚点
    • 连接点
    • 连接桩布局
    • 连接桩标签布局
    • 属性
    • 高亮器
    • 滤镜

连接桩标签布局

上一篇
连接桩布局
下一篇
属性

Resources

Ant Design
Galacea Effects
Umi-React 应用开发框架
Dumi-组件/文档研发工具
ahooks-React Hooks 库

社区

体验科技专栏
seeconfSEE Conf-蚂蚁体验科技大会

帮助

GitHub
StackOverflow

more products更多产品

Ant DesignAnt Design-企业级 UI 设计语言
yuque语雀-知识创作与分享工具
EggEgg-企业级 Node 开发框架
kitchenKitchen-Sketch 工具集
GalaceanGalacean-互动图形解决方案
xtech蚂蚁体验科技
© Copyright 2025 Ant Group Co., Ltd..备案号:京ICP备15032932号-38

Loading...

连接桩标签布局算法是一个具有如下签名的函数,返回标签相对于连接桩的位置和旋转角度。

type Definition<T> = (
portPosition: Point, // 连接桩的位置
elemBBox: Rectangle, // 节点的包围盒
args: T, // 标签位置参数
) => Result
interface Result {
position: Point.PointLike // 标签相对于位置
angle: number // 标签的旋转角度
attrs: Attr.CellAttrs // 标签的属性
}

创建连接桩时,可以在群组 groups 中指定该组的标签定位,也可以在 items 中覆盖群组中的定义:

graph.addNode(
...,
ports: {
// 连接桩分组
groups: {
group1: {
label: {
position: { // 标签布局算法
name: 'xxx', // 标签布局算法名称
args: { ... }, // 标签布局算法参数
},
},
},
},
// 连接桩定义
items: [
{
groups: 'group1',
label: {
position: { // 覆盖 group1 中指定的标签定位算法
name: 'xxx',
args: { ... },
}
},
}
],
},
)

下面我们一起来看看如何使用内置的标签布局算法,以及如何自定并注册自定义布局算法。

内置连接桩标签布局

Side

标签位于连接桩的某一侧。

  • 'left' 标签位于连接桩左侧。
  • 'right' 标签位于连接桩右侧。
  • 'top' 标签位于连接桩顶部。
  • 'bottom' 标签位于连接桩底部。

可以通过 args 来指定标签的位置和旋转角度。

interface SideArgs {
x?: number
y?: number
angle?: number
attrs?: Attr.CellAttrs
}
名称类型必选默认值描述
xnumber-用指定的 X 坐标替换计算结果中的 X 坐标。
ynumber-用指定的 Y 坐标替换计算结果中的 Y 坐标。
anglenumber-用指定的旋转角度替换计算结果中的旋转角度。
attrsAttr.CellAttrs-标签属性。
label: {
position: {
name : 'right',
args: {
y: 10, // 强制指定 y 坐标为 10,替换计算结果中的 y 坐标
attrs: {
text: {
fill: 'red', // 设置标签颜色为红色
},
},
},
},
}
Port Label Position

Inside/Outside

标签位于节点的内部或者外部,支持一下四种布局:

  • 'inside' 标签位于节点内围(靠近边线的内侧)。
  • 'outside' 标签位于节点外围(靠近边线的外侧)。
  • 'insideOriented' 标签位于节点内围,而且根据坐所在位自动调整文本的方向。
  • 'outsideOriented' 标签位于节点外围,而且根据坐所在位自动调整文本的方向。

支持通过 args.offset 来设置标签沿节点中到标签位置方向的偏移量。

interface InOutArgs {
offset?: number
x?: number
y?: number
angle?: number
attrs?: Attr.CellAttrs
}
名称类型必选默认值描述
offsetnumber15从节点中心到标签位置的方向上的偏移量。
xnumber-用指定的 X 坐标替换计算结果中的 X 坐标。
ynumber-用指定的 Y 坐标替换计算结果中的 Y 坐标。
anglenumber-用指定的旋转角度替换计算结果中的旋转角度。
attrsAttr.CellAttrs-标签属性。
label: {
position: {
name : 'outside',
},
}
Port Label Position
offset
15

Radial

将标签放在圆形或椭圆形节点的外围。支持一下两种布局:

  • 'radial' 标签位于圆形或椭圆形节点的外围。
  • 'radialOriented' 标签位于圆形或椭圆形节点的外围,并使标签文本自动沿圆弧方向旋转。
interface RadialArgs {
offset?: number
x?: number
y?: number
angle?: number
attrs?: Attr.CellAttrs
}
名称类型必选默认值描述
offsetnumber20从节点中心到标签位置的方向上的偏移量。
xnumber-用指定的 X 坐标替换计算结果中的 X 坐标。
ynumber-用指定的 Y 坐标替换计算结果中的 Y 坐标。
anglenumber-用指定的旋转角度替换计算结果中的旋转角度。
attrsAttr.CellAttrs-标签属性。
label: {
position: {
name : 'radial',
},
}
Port Label Position
offset
20

自定义连接桩标签布局

连接桩标签定位是一个具有如下签名的函数,返回标签相对于连接桩的位置和旋转角度。

type Definition<T> = (
portPosition: Point, // 连接桩的位置
elemBBox: Rectangle, // 节点的包围盒
args: T, // 标签位置参数
) => Result
interface Result {
position: Point.PointLike // 标签相对于位置
angle: number // 标签的旋转角度
attrs: Attr.CellAttrs // 标签的属性
}

所以我们可以按照上面规则来创建自定义布局算法,例如,实现一个位于连接桩右下角的布局:

function bottomRight(portPosition, elemBBox, args) {
const dx = args.dx || 10
const dy = args.dy || 10
return {
position: {
portPosition.x + dx,
portPosition.y + dy,
}
}
}

布局算法实现后,需要注册到系统,注册后就可以像内置布局算法那样来使用。

Graph.registerPortLabelLayout('bottomRight', bottomRight)

注册以后,我们就可以像内置布局算法那样来使用:

const rect = graph.addNode({
ports: {
groups: {
group1: {
position: {
name: 'top',
},
label: {
position: {
name: 'bottomRight',
},
},
},
},
items: [
{ id: 'port1', group: 'group1' },
{ id: 'port2', label: { position: 'bottomRight' } },
],
},
})