布局

G6 3.1 内置了丰富的布局。关于如何使用 G6 中内置的布局,请参考 Layout API文档

layout()

重新以当前配置的属性进行一次布局。

用法

  1. const graph = new G6.Graph({
  2. container: 'mountNode',
  3. width: 1000,
  4. height: 600,
  5. layout: {
  6. type: 'force',
  7. },
  8. modes: {
  9. default: ['drag-node'],
  10. },
  11. });
  12. graph.data({
  13. nodes: data.nodes,
  14. edges: data.edges.map((edge, i) => {
  15. edge.id = 'edge' + i;
  16. return Object.assign({}, edge);
  17. }),
  18. });
  19. graph.render();
  20. function refreshDragedNodePosition(e) {
  21. const model = e.item.get('model');
  22. model.fx = e.x;
  23. model.fy = e.y;
  24. }
  25. graph.on('node:dragstart', e => {
  26. // 拖动节点时重新布局
  27. graph.layout();
  28. refreshDragedNodePosition(e);
  29. });
  30. graph.on('node:drag', e => {
  31. refreshDragedNodePosition(e);
  32. });
  33. graph.on('node:dragend', e => {
  34. e.item.get('model').fx = null;
  35. e.item.get('model').fy = null;
  36. });

updateLayout(cfg)

更新布局配置项。

  • 如果参数 cfg 中含有 type 字段,type 字段类型为 String,且与现有布局方法不同,则更换布局;
  • 如果参数 cfg 中不包含 type 字段,则保持原有布局,仅更新布局配置项。参数
名称类型是否必选描述
cfgObjecttrue新布局配置项

用法

  1. const graph = new G6.Graph({
  2. container: 'mountNode',
  3. width: 1000,
  4. height: 600,
  5. modes: {
  6. default: ['drag-canvas', 'drag-node'],
  7. },
  8. layout: {
  9. type: 'circular',
  10. center: [500, 300],
  11. },
  12. animate: true,
  13. });
  14. graph.data(data);
  15. graph.render();
  16. // 实例化时通过layout指定布局,在合适的时候通过updateLayout更新布局配置
  17. graph.updateLayout({
  18. radius: 200,
  19. startAngle: Math.PI / 4,
  20. endAngle: Math.PI,
  21. divisions: 5,
  22. ordering: 'degree',
  23. });