插件窝 干货文章 AntV/G6图表中节点文本过长如何优雅处理并显示省略号?

AntV/G6图表中节点文本过长如何优雅处理并显示省略号?

省略号 节点 文本 graph 59    来源:    2025-03-21

在AntV/G6中,处理节点文本过长并显示省略号的问题,可以通过以下几种方式来实现:

1. 使用 ellipsis 属性

G6 提供了 ellipsis 属性,可以在节点文本过长时自动显示省略号。你可以通过设置 labelCfg 中的 ellipsis 属性来实现。

const graph = new G6.Graph({
  container: 'mountNode',
  width: 800,
  height: 600,
  defaultNode: {
    type: 'circle',
    labelCfg: {
      style: {
        fill: '#333',
        fontSize: 12,
      },
      ellipsis: true, // 启用省略号
      maxWidth: 100,  // 最大宽度,超出部分显示省略号
    },
  },
});

graph.data({
  nodes: [
    {
      id: 'node1',
      label: '这是一个非常长的节点文本,超出部分将会显示省略号',
      x: 100,
      y: 100,
    },
  ],
  edges: [],
});

graph.render();

2. 自定义 labelformatter

你可以通过自定义 labelformatter 函数来处理文本,手动截断并添加省略号。

const graph = new G6.Graph({
  container: 'mountNode',
  width: 800,
  height: 600,
  defaultNode: {
    type: 'circle',
    labelCfg: {
      style: {
        fill: '#333',
        fontSize: 12,
      },
      formatter: (text) => {
        const maxLength = 10; // 最大字符数
        return text.length > maxLength ? `${text.substring(0, maxLength)}...` : text;
      },
    },
  },
});

graph.data({
  nodes: [
    {
      id: 'node1',
      label: '这是一个非常长的节点文本,超出部分将会显示省略号',
      x: 100,
      y: 100,
    },
  ],
  edges: [],
});

graph.render();

3. 使用 CSS 控制文本溢出

你也可以通过 CSS 来控制文本的溢出显示省略号。首先,确保你的节点文本是通过 HTML 渲染的,然后使用 CSS 的 text-overflow 属性。

const graph = new G6.Graph({
  container: 'mountNode',
  width: 800,
  height: 600,
  defaultNode: {
    type: 'circle',
    labelCfg: {
      style: {
        fill: '#333',
        fontSize: 12,
        whiteSpace: 'nowrap', // 不换行
        overflow: 'hidden',  // 隐藏溢出部分
        textOverflow: 'ellipsis', // 显示省略号
        width: '100px', // 设置宽度
      },
    },
  },
});

graph.data({
  nodes: [
    {
      id: 'node1',
      label: '这是一个非常长的节点文本,超出部分将会显示省略号',
      x: 100,
      y: 100,
    },
  ],
  edges: [],
});

graph.render();

4. 使用 text 节点的 textBaselinetextAlign

如果你使用的是 text 节点,可以通过设置 textBaselinetextAlign 来控制文本的对齐方式,并结合 ellipsis 属性来处理文本溢出。

const graph = new G6.Graph({
  container: 'mountNode',
  width: 800,
  height: 600,
  defaultNode: {
    type: 'text',
    labelCfg: {
      style: {
        fill: '#333',
        fontSize: 12,
        textBaseline: 'middle', // 垂直居中
        textAlign: 'center',    // 水平居中
        ellipsis: true,         // 启用省略号
        maxWidth: 100,          // 最大宽度
      },
    },
  },
});

graph.data({
  nodes: [
    {
      id: 'node1',
      label: '这是一个非常长的节点文本,超出部分将会显示省略号',
      x: 100,
      y: 100,
    },
  ],
  edges: [],
});

graph.render();

总结

以上几种方法都可以有效地处理节点文本过长并显示省略号的问题。你可以根据具体的需求和场景选择合适的方式来实现。