Как нарисовать метки true только для текущего узла и подключенного узла, наведя курсор на текущий узел в sigmaJs? - PullRequest
1 голос
/ 06 ноября 2019

Я использую событие overNode объекта sigmaJs My Setting

settings: {
        autoRescale: ["nodePosition", "nodeSize"],
        labelThreshold: 0,
        adjustSizes: true,
        fixed: true,
        labelHoverBGColor: "#f45b3d",
        nodeMargin: 50,
        nodesPowRatio: 1,
        defaultNodeBorderColor: '#000000',
        minArrowSize: 7,
        drawLabels: false,
      }
this.s.bind("overNode", (d) => {
      this.s.graph.edges().forEach((e) => {
        if (e.target === d.data.node.id || e.source === d.data.node.id) 
        {
          e.color = "#407784";
          e.size = 3;
        } else {
          e.color = e.originalColor;
          e.size = 1;
        }
      });
      this.s.refresh();
    })

Я могу навести курсор и выделить выделенный узел с помощью overNode, но этот nodeLabel не отображается.

InПри этой настройке я изначально назначил drawLabels false, так как изначально не хочу отображать метку.

Поэтому, если я наведите курсор на какой-либо узел, я хочу отобразить метку только для подключенной метки.

1 Ответ

1 голос
/ 14 ноября 2019

Вы можете попробовать следующую логику:

this.s.graph.nodes().forEach(n => {
      if (n.id !== d.data.node.id) {
        n.color = "#D3D3D3";
        n.label = '';
      } else {
        n.label = n.displayLabel;
      }
    })

В первый раз, когда вы помещаете данные в узлы, просто пропустите пустую строку в качестве метки и добавьте метку отображения другого свойства.

Пожалуйстаубедитесь, что свойство drawLabels имеет значение true, а для overNode drawLabels должно быть установлено значение true, а outNode drawLabels должно иметь значение false.

Теперь цикл Above for будет использовать это свойство displayLabel всякий раз, когда вы хотите отобразить метку.

...