跳到主要内容

视图

配置

async

是否是异步渲染的画布。异步渲染不会阻塞 UI,对需要添加大量节点和边时的性能提升非常明显。但需要注意的是,一些同步操作可能会出现意外结果,比如获取某个节点的视图、获取节点/边的包围盒等,因为这些同步操作触发时异步渲染可能并没有完成。

virtual

是否只渲染可视区域内的元素。支持传入 boolean 或对象 VirtualOptions,默认为 false。当传入为布尔值 true 时,仅渲染当前可视区域内和缓冲边距(默认值:120px)范围内的元素。

当传入对象 VirtualOptions 时:

  • enabled: 是否启用虚拟渲染开关。
  • margin: 缓冲边距(单位 px)。在可视窗口边界外额外预渲染该边距范围内的元素,以减少拖拽/缩放过程中的重绘抖动,提高交互连续性。

示例:

new Graph({
  container: el,
  virtual: { enabled: true, margin: 200 },
})

使用虚拟渲染,在拖拽、缩放或滚动画布时,会根据画布窗口大小动态加载剩余元素。在元素数量很大的场景,能显著提升性能。

magnetThreshold

鼠标移动多少次后才触发连线,或者设置为 ‘onleave’ 时表示鼠标移出元素时才触发连线,默认为 0。

moveThreshold

触发 'mousemove' 事件之前,允许鼠标移动的次数,默认为 0。

clickThreshold

当鼠标移动次数超过指定的数字时,将不触发鼠标点击事件,默认为 0。

preventDefaultContextMenu

是否禁用画布的默认右键,默认为 true。

preventDefaultBlankAction

在画布空白位置响应鼠标事件时,是否禁用鼠标默认行为,默认为 true。

onPortRendered

(
  this: Graph,
  args: {
    node: Node
    port: Port
    container: Element
    selectors?: Markup.Selectors
    labelContainer: Element
    labelSelectors?: Markup.Selectors
    contentContainer: Element
    contentSelectors?: Markup.Selectors
  },
) => void

当某个连接桩渲染完成时触发的回调,参数如下:

名称 类型 非空 描述
node Node ✓ 节点实例。
port Port ✓ 连接桩选项。
container Element ✓ 连接桩的容器元素。
selectors Markup.Selectors 连接桩 Markup 渲染后的选择器键值对。
labelContainer Element ✓ 连接桩标签的容器元素。
labelSelectors Markup.Selectors 连接桩标签 Markup 渲染后的选择器键值对。
contentContainer Element ✓ 连接桩内容的容器元素。
contentSelectors Markup.Selectors 连接桩内容 Markup 渲染后的选择器键值对。

例如,我们可以渲染一个 React 类型的连接桩。

const graph = new Graph({
  container: this.container,
  onPortRendered(args) {
    const selectors = args.contentSelectors
    const container = selectors && selectors.foContent
    if (container) {
      ReactDOM.render(
        <Tooltip title="port">
          <div className="my-port" />
        </Tooltip>,
        container,
      )
    }
  },
})

onEdgeLabelRendered

type OnEdgeLabelRenderedArgs = {
  edge: Edge
  label: Edge.Label
  container: Element
  selectors: Markup.Selectors
}

(
  this: Graph,
  args: OnEdgeLabelRenderedArgs,
) => void | ((args: OnEdgeLabelRenderedArgs) => void)

当边的文本标签渲染完成时触发的回调,并且它可以返回一个清理函数,该函数会在标签被销毁时执行,参数如下:

名称 类型 非空 描述
edge Edge ✓ 边实例。
label Edge.Label ✓ 文本标签选项。
container Element ✓ 文本标签容器。
selectors Markup.Selectors ✓ 文本标签 Markup 渲染后的选择器键值对。

我们可以在定义 Label 的 Markup 时添加 <foreignObject> 元素来支持 HTML 和 React 的渲染能力。

const graph = new Graph({
  container: this.container,
  onEdgeLabelRendered: (args) => {
    const { selectors } = args
    const content = selectors.foContent as HTMLDivElement

    if (content) {
      content.style.display = 'flex'
      content.style.alignItems = 'center'
      content.style.justifyContent = 'center'
      ReactDOM.render(<Button size="small">Antd Button</Button>, content)
    }

    // 并且它可以返回一个清理函数,该函数会在标签被销毁时执行
    return (edgeLabelRenderedArgs: typeof args) => {
      // Remove event listeners...
    }
  },
})

// 这段代码的主要目的是测试 onEdgeLabelRendered 的清理函数在特定场景下的触发情况
const edge = graph.addEdge({
  source: [170, 160],
  target: [550, 160],
  labels: [
    {
      attrs: {
        text: {
          text: "Custom Label",
        },
      },
    },
  ],
});

setTimeout(() => {
  edge.prop("labels", ["Updated Label"]);
}, 2000);

createCellView

(this: Graph, cell: Cell) => CellView | null | undefined

自定义元素的视图,可以返回一个 CellView,会替换默认的视图,如果返回 null,则不会渲染,如果返回 undefined,会按照默认方式渲染。

方法

findView(…)

findView(ref: Cell | Element): CellView | null

根据节点/边或元素查找对应的视图。

findViewByCell(…)

findViewByCell(cellId: string | number): CellView | null
findViewByCell(cell: Cell | null): CellView | null

根据节点/边 ID 或实例查找对应的视图。

findViewByElem(…)

findViewByElem(elem: string | Element | undefined | null): CellView | null

根据元素选择器或元素对象查找对应的视图。

findViewsFromPoint(…)

findViewsFromPoint(x: number, y: number): CellView[]
findViewsFromPoint(p: Point.PointLike): CellView[]

返回节点/边的包围盒包含指定点的视图。

findViewsInArea(…)

findViewsInArea(
  x: number,
  y: number,
  width: number,
  height: number,
  options?: FindViewsInAreaOptions,
): CellView[]
findViewsInArea(
  rect: Rectangle.RectangleLike,
  options?: FindViewsInAreaOptions,
): CellView[]

返回节点/边的包围盒与指定矩形相交的视图,当 options.strict 为 true 时需要节点/边的包围盒完全包含指定的矩形。

findViews(…)

findViews(ref: Point.PointLike | Rectangle.RectangleLike): CellView[]

返回节点/边的包围盒包含指定的点或与指定的矩形相交的视图。

© Copyright 2026 Ant Group Co., Ltd..备案号:京ICP备15032932号-38
全站搜索
文档与示例输入关键词开始搜索

输入关键词,查找文档、API 与示例

↑↓选择↵打开Esc关闭