FixElementSize 缩放画布时固定元素大小
上一篇
DragElementForce 力导向拖拽元素
下一篇
FocusElement 聚焦元素
Loading...
FixElementSize 是 G6 提供的一种内置交互,用于在视图缩放过程中,保持节点中某些元素的尺寸不随缩放变化。 提升缩放过程中的视觉一致性与可操作性。 通过监听视口变化,自动对标记为“固定尺寸”的元素进行缩放补偿,确保它们在不同缩放级别下保持相对恒定的显示尺寸。支持全局启用,也支持按需控制具体元素或节点的适配行为。
这一交互主要用于:
createGraph({data: {nodes: [{ id: 'node1', style: { x: 200, y: 100, labelText: 'node1' } },{ id: 'node2', style: { x: 360, y: 100, labelText: 'node2' } },{ id: 'node3', style: { x: 280, y: 220, labelText: 'node3' } },],edges: [{ source: 'node1', target: 'node2' },{ source: 'node1', target: 'node3' },{ source: 'node2', target: 'node3' },],},node: {style: { label: true, labelFill: '#666', labelFontSize: 14, labelPlacement: 'bottom' },state: {custom: { fill: '#ffa940' },},},edge: {stroke: '#8b9baf',state: {custom: { stroke: '#ffa940' },},},behaviors: ['zoom-canvas', 'drag-canvas', { key: 'fix-element-size', type: 'fix-element-size' }],plugins: [{ type: 'grid-line', size: 30 }],animation: true,},{ width: 800, height: 400 },(gui, graph) => {const options = {key: 'fix-element-size',type: 'fix-element-size',animation: true,enable: true,reset: true,};const optionFolder = gui.addFolder('CollapseExpand Options');optionFolder.add(options, 'type').disable(true);optionFolder.add(options, 'animation');optionFolder.add(options, 'enable');optionFolder.add(options, 'reset');optionFolder.onChange(({ property, value }) => {graph.updateBehavior({key: 'fix-element-size',[property]: value,});graph.render();});},);
在图配置中添加这一交互
1. 快速配置(静态)
使用字符串形式直接声明,这种方式简洁但仅支持默认配置,且配置后不可动态修改:
const graph = new Graph({// 其他配置...behaviors: ['fix-element-size'],});
2. 对象配置(推荐)
使用对象形式进行配置,支持自定义参数,且可以在运行时动态更新配置:
const graph = new Graph({// 其他配置...behaviors: [{type: 'fix-element-size',enable: true, // 开启该交互state: 'selected', // 要固定大小的元素状态reset: true, // 元素重绘时还原样式},],});
配置项 | 说明 | 类型 | 默认值 | 必选 |
---|---|---|---|---|
type | 交互类型名称 | string | fix-element-size | √ |
enable | 是否启用该交互,示例 | boolean | ((event: Event) => boolean) | true | |
reset | 元素重绘时是否还原样式 | boolean | false | |
state | 指定要固定大小的元素状态 | string | "" | |
node | 节点配置项,用于定义哪些属性在视觉上保持固定大小。若未指定(即为 undefined),则整个节点将被固定,示例 | FixShapeConfig | FixShapeConfig[] | ||
nodeFilter | 节点过滤器,用于过滤哪些节点在缩放过程中保持固定大小 | (datum: NodeData) => boolean | () => true | |
edge | 边配置项,用于定义哪些属性在视觉上保持固定大小。默认固定 lineWidth、labelFontSize 属性,用法同node配置项 | FixShapeConfig | FixShapeConfig[] | [ shape: 'key', fields: ['lineWidth'] , shape: 'halo', fields: ['lineWidth'] , shape: 'label' ] | |
edgeFilter | 边过滤器,用于过滤哪些边在缩放过程中保持固定大小 | (datum: EdgeData) => boolean | () => true | |
combo | Combo 配置项,用于定义哪些属性在视觉上保持固定大小。默认整个 Combo 将被固定,用法同node配置项 | FixShapeConfig | FixShapeConfig[] | ||
comboFilter | Combo 过滤器,用于过滤哪些 Combo 在缩放过程中保持固定大小 | (datum: ComboData) => boolean | () => true |
是否启用固定元素大小交互。默认在缩小画布时启用
默认在缩小画布时启用,设置 enable: (event) => event.data.scale < 1
;如果希望在放大画布时启用,设置 enable: (event) => event.data.scale > 1
;如果希望在放大缩小画布时都启用,设置 enable: true
节点配置项,用于定义哪些属性在视觉上保持固定大小。若未指定(即为 undefined),则整个节点将被固定
示例
如果在缩放过程中希望固定节点主图形的 lineWidth,可以这样配置:
{node: [{ shape: 'key', fields: ['lineWidth'] }];}
如果在缩放过程中想保持元素标签大小不变,可以这样配置:
{shape: 'label';}
参数 | 描述 | 类型 | 默认值 | 必选 |
---|---|---|---|---|
shape | 指定要固定大小的图形,可以是图形的类名字,或者是一个函数,该函数接收构成元素的所有图形并返回目标图形 | string | ((shapes: DisplayObject[]) => DisplayObject) | - | ✓ |
fields | 指定要固定大小的图形属性字段。如果未指定,则默认固定整个图形的大小 | string[] | - | ✘ |