G6 中的 元素 操作 API 允许您控制图中节点、边和组合(Combo)等元素的行为和属性。这些 API 可以用于:
通过这些操作,您可以实现丰富的交互效果和视觉呈现。
获取元素位置。
getElementPosition(id: ID): Point;
参数:
参数 | 描述 | 类型 | 默认值 | 必选 |
---|---|---|---|---|
id | 元素 ID | string | - | ✓ |
返回值:
示例:
graph.getElementPosition('node1');
获取元素自身以及子节点在世界坐标系下的渲染包围盒。
getElementRenderBounds(id: ID): AABB;
参数:
参数 | 描述 | 类型 | 默认值 | 必选 |
---|---|---|---|---|
id | 元素 ID | string | - | ✓ |
返回值:
获取元素的渲染样式。
getElementRenderStyle(id: ID): Record<string, any>;
参数:
参数 | 描述 | 类型 | 默认值 | 必选 |
---|---|---|---|---|
id | 元素 ID | string | - | ✓ |
返回值:
获取元素的状态。
getElementState(id: ID): State[];
参数:
参数 | 描述 | 类型 | 默认值 | 必选 |
---|---|---|---|---|
id | 元素 ID | string | - | ✓ |
返回值:
获取元素类型。
getElementType(id: ID): string;
参数:
参数 | 描述 | 类型 | 默认值 | 必选 |
---|---|---|---|---|
id | 元素 ID | string | - | ✓ |
返回值:
获取元素可见性。
getElementVisibility(id: ID): 'visible' | 'hidden' ;
参数:
参数 | 描述 | 类型 | 默认值 | 必选 |
---|---|---|---|---|
id | 元素 ID | string | - | ✓ |
返回值:
获取元素层级。
getElementZIndex(id: ID): number;
参数:
参数 | 描述 | 类型 | 默认值 | 必选 |
---|---|---|---|---|
id | 元素 ID | string | - | ✓ |
返回值:
设置元素状态,支持两种调用方式:
// 设置单个元素状态setElementState(id: ID, state: State | State[], animation?: boolean): Promise<void>;// 批量设置元素状态setElementState(state: Record<ID, State | State[]>, animation?: boolean): Promise<void>;
参数:
单个元素状态设置
参数 | 描述 | 类型 | 默认值 | 必选 |
---|---|---|---|---|
id | 要设置状态的元素 ID | string | - | ✓ |
state | 要设置的状态 | State | State[] | - | ✓ |
animation | 是否启用动画 | boolean | - |
批量元素状态设置
参数 | 描述 | 类型 | 默认值 | 必选 |
---|---|---|---|---|
state | 元素ID到状态的映射 | Record<ID, State | State[]> | - | ✓ |
animation | 是否启用动画 | boolean | - |
返回值:
示例:
// 设置单个元素状态await graph.setElementState('node1', 'selected');// 设置多个元素状态await graph.setElementState({node1: 'selected',node2: 'hover',node3: ['selected', 'hover'],});
设置元素的可见性,支持两种调用方式:
// 设置单个元素可见性setElementVisibility(id: ID, visibility: 'visible' | 'hidden', animation?: boolean): Promise<void>;// 批量设置元素可见性setElementVisibility(visibility: Record<ID, 'visible' | 'hidden'>, animation?: boolean): Promise<void>;
参数:
单个元素可见性设置
参数 | 描述 | 类型 | 默认值 | 必选 |
---|---|---|---|---|
id | 要设置可见性的元素 ID | string | - | ✓ |
visibility | 要设置的可见性 | 'visible' | 'hidden' | - | ✓ |
animation | 是否启用动画 | boolean | - |
批量元素可见性设置
参数 | 描述 | 类型 | 默认值 | 必选 |
---|---|---|---|---|
visibility | 元素ID到可见性的映射 | Record<ID, 'visible' | 'hidden' > | - | ✓ |
animation | 是否启用动画 | boolean | - |
返回值:
示例:
// 设置单个元素可见性await graph.setElementVisibility('node1', 'hidden');// 设置多个元素可见性await graph.setElementVisibility({node1: 'hidden',node2: 'visibility',});
设置元素的层级,有两种调用方式:
// 设置单个元素层级setElementZIndex(id: ID, zIndex: number): Promise<void>;// 批量设置元素层级setElementZIndex(zIndex: Record<ID, number>): Promise<void>;
参数:
单个元素层级设置
参数 | 描述 | 类型 | 默认值 | 必选 |
---|---|---|---|---|
id | 元素 ID | string | - | ✓ |
zIndex | 层级 | number | - | ✓ |
批量元素层级设置
参数 | 描述 | 类型 | 默认值 | 必选 |
---|---|---|---|---|
zIndex | 元素ID到层级的映射 | Record<ID, number> | - | ✓ |
返回值:
示例:
// 设置单个元素层级await graph.setElementZIndex('node1', 10);// 设置多个元素层级await graph.setElementZIndex({node1: 10,node2: 20,node3: 30,});
设置节点样式映射。即 options.node
的值。
setNode(node: NodeOptions): void;
参数:
参数 | 描述 | 类型 | 默认值 | 必选 |
---|---|---|---|---|
node | 节点配置 | NodeOptions | - | ✓ |
示例:
// 设置所有的节点填充色为红色graph.setNode({style: {fill: 'red',},});
设置边样式映射。即 options.edge
的值。
setEdge(edge: EdgeOptions): void;
参数:
参数 | 描述 | 类型 | 默认值 | 必选 |
---|---|---|---|---|
edge | 边配置 | EdgeOptions | - | ✓ |
设置组合样式映射。即 options.combo
的值。
setCombo(combo: ComboOptions): void;
参数:
参数 | 描述 | 类型 | 默认值 | 必选 |
---|---|---|---|---|
combo | 组合配置 | ComboOptions | - | ✓ |
收起指定元素,通常用于折叠组合(Combo)或具有子元素的节点。
collapseElement(id: ID, options?: boolean | CollapseExpandNodeOptions): Promise<void>;
参数:
参数 | 描述 | 类型 | 默认值 | 必选 |
---|---|---|---|---|
id | 要收起的元素 ID | string | - | ✓ |
options | 是否启用动画或收起节点的详细配置项 | boolean | CollapseExpandNodeOptions | - |
返回值:
示例:
// 简单收起,使用默认配置await graph.collapseElement('combo1');// 收起并启用动画await graph.collapseElement('combo1', true);// 收起并保证展开/收起的节点位置不变await graph.collapseElement('combo1', {align: true,});
展开指定元素,通常用于展开先前收起的组合(Combo)或节点。
expandElement(id: ID, options?: boolean | CollapseExpandNodeOptions): Promise<void>;
参数:
参数 | 描述 | 类型 | 默认值 | 必选 |
---|---|---|---|---|
id | 要展开的元素 ID | string | - | ✓ |
options | 是否启用动画或展开节点的详细配置项 | boolean | CollapseExpandNodeOptions | - |
返回值:
示例:
// 简单展开,使用默认配置await graph.expandElement('combo1');// 展开并启用动画await graph.expandElement('combo1', true);// 展开并保证展开/收起的节点位置不变await graph.expandElement('combo1', {align: true,});
将指定元素置于最顶层,使其显示在其他重叠元素之上。
frontElement(id: ID | ID[]): void;
参数:
参数 | 描述 | 类型 | 默认值 | 必选 |
---|---|---|---|---|
id | 元素 ID | string | string[] | - | ✓ |
返回值:
示例:
// 将节点置于最顶层graph.frontElement('node1');// 对于选中的多个节点,都置于最顶层graph.frontElement(['node1', 'node2', 'node3']);
显示指定元素。
showElement(id: ID | ID[], animation?: boolean): Promise<void>;
参数:
参数 | 描述 | 类型 | 默认值 | 必选 |
---|---|---|---|---|
id | 元素 ID | string | string[] | - | ✓ |
animation | 是否启用动画 | boolean | - |
返回值:
示例:
// 显示单个元素await graph.showElement('node1');// 带动画显示元素await graph.showElement('node1', true);// 显示多个元素await graph.showElement(['node1', 'node2', 'node3']);
隐藏指定元素。
hideElement(id: ID | ID[], animation?: boolean): Promise<void>;
参数:
参数 | 描述 | 类型 | 默认值 | 必选 |
---|---|---|---|---|
id | 元素 ID | string | string[] | - | ✓ |
animation | 是否启用动画 | boolean | - |
返回值:
示例:
// 无动画隐藏元素await graph.hideElement('node1');// 带动画隐藏元素await graph.hideElement('node1', true);// 隐藏多个元素await graph.hideElement(['node1', 'node2', 'node3'], true);
相对平移元素指定距离,支持两种调用方式:
// 将元素平移指定距离(相对平移)translateElement(id: ID, offset: Point, animation?: boolean): Promise<void>;// 批量将元素平移指定距离(相对平移)translateElement(offsets: Record<ID, Point>, animation?: boolean): Promise<void>;
参数:
单个元素平移
参数 | 描述 | 类型 | 默认值 | 必选 |
---|---|---|---|---|
id | 要平移的元素 ID | string | - | ✓ |
offset | 平移的相对距离 [dx, dy] | [number, number] | - | ✓ |
animation | 是否启用动画 | boolean | - |
批量元素平移
参数 | 描述 | 类型 | 默认值 | 必选 |
---|---|---|---|---|
offsets | 元素ID到平移距离的映射 | Record<ID, [number, number]> | - | ✓ |
animation | 是否启用动画 | boolean | - |
返回值:
示例:
// 向右平移100像素,向下平移50像素await graph.translateElementBy('node1', [100, 50]);// 带动画平移await graph.translateElementBy('node1', [100, 50], true);// 对多个节点应用相同的平移await graph.translateElementBy({node1: [50, 50],node2: [100, 100],node3: [150, 150],},true,);
将元素移动到指定位置,支持两种调用方式:
// 将元素移动到指定位置(绝对位置)translateElementTo(id: ID, position: Point, animation?: boolean): Promise<void>;// 批量将元素移动到指定位置(绝对位置)translateElementTo(positions: Record<ID, Point>, animation?: boolean): Promise<void>;
参数:
单个元素移动
参数 | 描述 | 类型 | 默认值 | 必选 |
---|---|---|---|---|
id | 要移动的元素 ID | string | - | ✓ |
position | 目标绝对位置 [x, y] | [number, number] | - | ✓ |
animation | 是否启用动画 | boolean | - |
批量元素移动
参数 | 描述 | 类型 | 默认值 | 必选 |
---|---|---|---|---|
positions | 元素ID到目标位置的映射 | Record<string, [number, number]> | - | ✓ |
animation | 是否启用动画 | boolean | - |
返回值:
示例:
// 将节点移动到画布的 (200, 300) 位置await graph.translateElementTo('node1', [200, 300]);// 带动画移动await graph.translateElementTo('node1', [200, 300], true);// 将一组节点整齐排列await graph.translateElementTo({node1: [100, 100],node2: [200, 200],node3: [300, 100],},true,);
聚焦到指定元素,使元素居中于视口。
focusElement(id: ID | ID[], animation?: ViewportAnimationEffectTiming): Promise<void>;
参数:
参数 | 描述 | 类型 | 默认值 | 必选 |
---|---|---|---|---|
id | 要聚焦的一个或多个元素 ID | string | string[] | - | ✓ |
animation | 视口动画配置 | ViewportAnimationEffectTiming | - |
返回值:
示例:
// 聚焦到单个节点await graph.focusElement('node1');// 使用自定义动画配置await graph.focusElement('node1', {duration: 800,easing: 'ease-in-out',});// 聚焦到多个节点await graph.focusElement(['node1', 'node2', 'node3']);
收起或展开元素的配置选项。
interface CollapseExpandNodeOptions {/*** 是否使用动画*/animation?: boolean;/*** 保证展开/收起的节点位置不变*/align?: boolean;}
视口动画配置类型。
type ViewportAnimationEffectTiming =| boolean // 是否启用动画| {easing?: string; // 缓动函数duration?: number; // 动画持续时间(ms)};
AABB (Axis-Aligned Bounding Box) 是"轴对齐包围盒"的缩写,是计算机图形学中的一个基础概念。
interface AABB {x: number; // 矩形左上角的 x 坐标y: number; // 矩形左上角的 y 坐标width: number; // 矩形宽度height: number; // 矩形高度}
元素状态类型。
type State = 'selected' | 'hover' | 'active' | 'inactive' | 'disabled' | string;