logo

X6

  • 文档
  • API
  • 图表示例
  • 常见问题
  • 更新日志
  • XFlow
  • 所有产品antv logo arrow
  • 2.x
  • 开始
    • 简介
    • 快速上手
  • 组件
    • XFlowGraph 画布
    • Background 背景
    • Grid 网格
    • Clipboard 复制粘贴
    • History 撤销重做
    • Minimap 小地图
    • Snapline 对齐线
    • Transform 图形变换
    • Control 控制器
  • Hook
    • useGraphInstance
    • useGraphStore
    • useGraphEvent
    • useDnd
    • useClipboard
    • useExport
    • useHistory
    • useKeyboard
  • Store

XFlowGraph 画布

上一篇
快速上手
下一篇
Background 背景

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...

XFlow画布组件

基础用法

注意

<XFlowGraph /> 组件只能在 <XFlow /> 组件之内方可正常使用

在 <XFlow /> 下引入 <XFlowGraph /> 后, 其组件内部会将画布的实例保存到 <XFlow /> 的 context 中,以供 <XFlow /> 的 children 使用, 可以在组件中使用 useGraphInstance Hook 快速获取画布实例

<XFlow>
...
<XFlowGraph />
<XFlow>
XFlowGraph 配置

画布默认拥有快捷键和框选功能

画布只读

禁止节点和边的交互

当 readonly 为 false 时候, 如果节点/边的 draggable 属性为 true 的时候, 则节点/边可以进行移动

<XFlowGraph readonly />

画布缩放

  • 画布的最小最大缩放级别

通过设置 minScale maxScale 来设置画布缩放

<XFlowGraph minScale={1} maxScale={10} />
  • 通过滚轮缩放画布

具体的 zoomOptions 配置 可以参考 mousewheel 配置

<XFlowGraph
zoomable
zoomOptions={{
global: true,
modifiers: ['ctrl', 'meta'],
}}
/>

画布滚动

开启画布滚动功能

<XFlowGraph scroller />

画布平移

开启 pannable 来支持画布拖拽平移, 通过 panOptions 来进行拖拽平移配置。

<XFlowGraph
pannable
panOptions={{
eventTypes: ['leftMouseDown'],
modifiers: ['ctrl']
}}
/>

panOptions 的配置参数如下:

参数名描述类型默认值
modifiers配置修饰键, 需要按下修饰键并点击鼠标才能触发画布拖拽string | ('alt' | 'ctrl' | 'meta' | 'shift')[] | null-
eventTypes触发画布平移的交互方式('leftMouseDown' | 'rightMouseDown' | 'mouseWheel', 'mouseWheelDown')[]-

拖拽可能和其他操作冲突,此时可以设置 modifiers 参数,设置修饰键后需要按下修饰键并点击鼠标才能触发画布拖拽。

ModifierKey 支持以下几种形式:

  • alt 表示按下 alt。
  • [alt, ctrl] 表示按下 alt 或 ctrl。
  • alt|ctrl 表示按下 alt 或 ctrl。
  • alt&ctrl 表示同时按下 alt 和 ctrl。
  • alt|ctrl&shift 表示同时按下 alt 和 shift 或者同时按下 ctrl 和 shift。

eventTypes 支持三种形式或者他们之间的组合:

  • leftMouseDown: 按下鼠标左键移动进行拖拽
  • rightMouseDown: 按下鼠标右键移动进行拖拽
  • mouseWheel: 使用鼠标滚轮滚动拖拽
  • mouseWheelDown: 按下鼠标滚轮进行拖拽

视口变换

  • centerView 设置为 true 后, 画布的内容中心将和视口中心对齐, 可通过 centerViewOptions 来进行配置。
<XFlowGraph
centerView
centerViewOptions={{
padding: { left: 100 }
}}
fitView
/>

centerViewOptions 的配置参数如下:

参数名描述类型默认值
padding边距,只在 scroller 画布中生效number | Padding
useCellGeometry是否通过节点/边的几何信息(Model)计算内容区域booleantrue
  • fitView 缩放画布内容,使画布内容充满视口, 可通过 fitView 来进行配置。 fitViewOptions 的配置参数如下:
参数名描述类型默认值
padding边距number | { left: number, top: number, right: number, bottom: number }-
contentArea内容区域,默认获取画布内容区域Rectangle.RectangleLike-
viewportArea视口区域,默认获取画布视口Rectangle.RectangleLike-
scaleGrid修正缩放比例为 scaleGrid 的整倍数number-
minScale最小缩放比例number-
maxScale最大缩放比例number-
minScaleXX 轴方向的最小缩放比例number-
maxScaleXX 轴方向的最大缩放比例number-
minScaleYY 轴方向的最小缩放比例number-
maxScaleYY 轴方向的最大缩放比例number-
preserveAspectRatio是否保持长宽比booleanfalse
useCellGeometry是否使用节点/边的几何信息(Model)计算包围盒booleantrue

节点组合

将一个节点拖动到另一个节点中,使其成为另一节点的子节点

<XFlowGraph
embedable
embedOptions={{
frontOnly:true,
findParent: 'bbox',
validate: () => true,
}}
/>

embedOptions 参数配置如下:

参数名描述类型默认值
findParent在节点被移动时通过 findParent 指定的方法返回父节点。默认值为findParentbbox
frontOnly如果 frontOnly 为 true ,则只能嵌入显示在最前面的节点booleantrue
validatevalidate 为判断节点能否被嵌入父节点的函数validate() => true

节点移动范围

通过配置 restrict 来限制节点移动范围, 通过 restrictOptions 可以指定节点移动范围

<XFlowGraph
restrict
restrictOptions={{
bound: {
x: 0,
y: 0,
width: 100,
height: 100,
},
}}
/>

restrictOptions 可以指定一个节点的移动范围, 如果没有设置,默认节点不能移动超出画布区域

restrictOptions?: {
bound:
| Rectangle.RectangleLike
| ((arg: CellView | null) => Rectangle.RectangleLike | null);
};

连线配置

配置 connectionOptions 可以实现连线交互, 具体的配置可以参考 连线配置

<XFlowGraph
connectionOptions={{
snap: true,
allowBlank: false,
allowLoop: false,
highlight: true,
anchor: 'center',
router: 'orth',
connector: 'rounded',
}}
/>

注意: 与连线配置不同的是,如果你想要自定义新建的边的样式, 那么需要设置 connectionEdgeOptions 参数,而不是在 connectionOptions 中设置 createEdge

connectionEdgeOptions={{
animated: true,
draggable: false,
selected: false,
attrs: {
line: {
stroke: 'rgb(72, 203, 164)',
strokeWidth: 2,
targetMarker: {
name: 'block',
width: 14,
height: 10,
},
},
},
zIndex: 0,
}}

connectionEdgeOptions 参数除了继承 Edge,还额外有 selected | draggable | animated 三个属性

export interface EdgeOptions extends Edge.Metadata {
selected?: boolean; // 是否被选中
draggable?: boolean; // 是否可拖拽
animated?: boolean; // 是都展示动画
}

交互高亮

指定触发某种交互时节点/边的高亮样式

HighlightManager.Options 有两个参数, name 以及其对应的 args , name 默认内置了两种高亮器,一种是 stroke, 一种是 className

注意:当 embedHighlightOptions nodeAvailableHighlightOptions magnetAvailableHighlightOptions magnetAdsorbedHighlightOptions 这几种高亮配置缺省时, 默认使用 defaultHighlightOptions 配置

// stroke
<XFlowGraph
defaultHighlightOptions={{
name: 'stroke',
args: {
rx: 0,
ry: 0,
padding: 4,
attrs: {
'stroke-width': 2,
stroke: 'red',
},
},
}}
/>
// className
<XFlowGraph
defaultHighlightOptions={{
name: 'className',
args: {
className: 'x6-highlighted'
},
}}
/>

API

XFlowGraph

参数名描述类型默认值
style语义化结构 styleCSSProperties-
classNames语义化结构 classstring-
readonly禁止画布交互booleanfalse
virtual是否只渲染可视区域内容booleanfalse
minScale画布的最小缩放级别number0.01
maxScale画布的最大缩放级别 | number16
zoomable是否启用了鼠标滚轮来缩放画布booleanfalse
zoomOptions启用鼠标滚轮缩放画布的配置Omit<MouseWheelOptions, 'enabled'>-
pannable是否开启画布平移交互booleanfalse
panOptions开启画布平移交互的配置panOptions-
centerView将画布内容中心与视口中心对齐booleanfalse
centerViewOptions将画布内容中心与视口中心对齐配置centerViewOptions-
fitView缩放画布内容,使画布内容充满视口booleanfalse
fitViewOptions缩放画布内容配置fitViewOptions-
scroller是否开启滚动画布功能booleanfalse
scrollerOptions开启滚动画布功能的配置scrollerOptions-
connectionOptions连线配置Omit<Options.Connecting, 'createEdge'>-
connectionEdgeOptions连线选项中的自定义边EdgeOptions-
embedable是否允许节点之间组合booleanfalse
embedOptions节点组合配置embedOptions-
restrict是否限制节点的移动范围booleanfalse
restrictOptions限制节点移动范围配置restrict配置-
selectOptions框选配置Selection配置-
keyboardOptions快捷键配置Keyboard配置-
defaultHighlightOptions默认高亮选项,当以下高亮配置缺省时被使用HighlightManager.Options-
embedHighlightOptions拖动节点进行嵌入操作过程中,节点可以被嵌入时被使用HighlightManager.Options-
nodeAvailableHighlightOptions连线过程中,节点可以被链接时被使用HighlightManager.Options-
magnetAvailableHighlightOptions连线过程中,连接桩可以被链接时被使用HighlightManager.Options-
magnetAdsorbedHighlightOptions连线过程中,自动吸附到连接桩时被使用HighlightManager.Options-