Loading...
FixElementSize is a built-in interaction provided by G6, used to maintain the size of certain elements within nodes unchanged during the zooming process. It enhances visual consistency and operability during zooming. By listening to viewport changes, it automatically scales elements marked as "fixed size" to ensure they maintain a relatively constant display size at different zoom levels. It supports global enablement and also allows control over specific elements or nodes as needed.
This interaction is mainly used for:
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();});},);
Add this interaction in the graph configuration
1. Quick Configuration (Static)
Declare directly using a string form. This method is simple but only supports default configuration and cannot be dynamically modified after configuration:
const graph = new Graph({// Other configurations...behaviors: ['fix-element-size'],});
2. Object Configuration (Recommended)
Configure using an object form, supporting custom parameters, and can dynamically update the configuration at runtime:
const graph = new Graph({// Other configurations...behaviors: [{type: 'fix-element-size',enable: true, // Enable this interactionstate: 'selected', // State of elements to fix sizereset: true, // Restore style when elements are redrawn},],});
Option | Description | Type | Default | Required |
---|---|---|---|---|
type | Interaction type name | string | fix-element-size | ✓ |
enable | Whether to enable this interaction, example | boolean | ((event: Event) => boolean) | true | |
reset | Whether to restore style when elements are redrawn | boolean | false | |
state | Specify the state of elements to fix size | string | "" | |
node | Node configuration item, used to define which attributes maintain a fixed visual size. If not specified (i.e., undefined), the entire node will be fixed, example | FixShapeConfig | FixShapeConfig[] | ||
nodeFilter | Node filter, used to filter which nodes maintain a fixed size during zooming | (datum: NodeData) => boolean | () => true | |
edge | Edge configuration item, used to define which attributes maintain a fixed visual size. By default, the lineWidth and labelFontSize attributes are fixed, usage is the same as node configuration item | FixShapeConfig | FixShapeConfig[] | [ shape: 'key', fields: ['lineWidth'] , shape: 'halo', fields: ['lineWidth'] , shape: 'label' ] | |
edgeFilter | Edge filter, used to filter which edges maintain a fixed size during zooming | (datum: EdgeData) => boolean | () => true | |
combo | Combo configuration item, used to define which attributes maintain a fixed visual size. By default, the entire Combo will be fixed, usage is the same as node configuration item | FixShapeConfig | FixShapeConfig[] | ||
comboFilter | Combo filter, used to filter which Combos maintain a fixed size during zooming | (datum: ComboData) => boolean | () => true |
Whether to enable the fixed element size interaction. By default, it is enabled when zooming out the canvas
By default, it is enabled when zooming out the canvas, set enable: (event) => event.data.scale < 1
; if you want to enable it when zooming in, set enable: (event) => event.data.scale > 1
; if you want to enable it when both zooming in and out, set enable: true
Node configuration item, used to define which attributes maintain a fixed visual size. If not specified (i.e., undefined), the entire node will be fixed
Example
If you want to fix the lineWidth of the main shape of the node during zooming, you can configure it like this:
{node: [{ shape: 'key', fields: ['lineWidth'] }];}
If you want to keep the size of the element label unchanged during zooming, you can configure it like this:
{shape: 'label';}
Parameter | Description | Type | Default | Required |
---|---|---|---|---|
shape | Specify the shape to fix size, it can be the class name of the shape, or a function that receives all shapes constituting the element and returns the target shape | string | ((shapes: DisplayObject[]) => DisplayObject) | - | ✓ |
fields | Specify the fields of the shape to fix size. If not specified, the entire shape size is fixed by default | string[] | - | ✘ |