3

我有一个由 d3 制作的图表,上面有 dagre-d3 用于绘制有向图。这给了我渲染图表的期望:

在此处输入图像描述

要编辑构建图表的数据,每个元素都是可点击的。这对于使用标签渲染边缘的情况很好,但它们并不总是有标签,导致未标记的边缘很难单击以进行编辑。这些分配给边缘的样式是:

#visitGraph .edgePath {
   cursor: pointer;
   stroke: #333;
   stroke-width: 2px;
   fill: none;
   padding: 10px;
}

渲染的 svg 是:

<g class="edgePath enter">
    <path marker-end="url(#arrowhead)" d="M198.5,121L198,124.9C198.4,128.8,198.4,136.6,198.4,144.5C198.4,152.3,198.4,160.1,198.4,164.0L198.5,168" style="opacity: 1">
    </path>
</g>

在不更改 dagre-d3 中的代码以在线条上添加过度绘制的情况下,就像我在其他 SVG 建议中看到的那样,我能做些什么来增加这些可点击元素周围的区域?我已经尝试过样式中的paddingmargin和各种值,pointer-events但无济于事。

4

3 回答 3

2

我就是这样做的,我很确定它也可以使用path

<g>
  <line class="clickable-area" stroke="transparent" stroke-width="5" x1="0" y1="0" x2="1" y2="1"></line>
  <line class="visible-edge" stroke="red" stroke-width="0.5" x1="0" y1="0" x2="1" y2="1"></line>
</g>

如您所见,有一个具有较大stroke-width值的虚拟边,我将原始边放在该元素上。

于 2015-11-27T08:46:53.577 回答
0

我最终使用标签使其更容易点击。我用了很棒的字体让它更花哨。

g.setEdge(node1.uuid, node2.uuid, {
  labelType: "html",
  label: "<span class='fa fa-2x fa-info-circle'/>",
  style: getStyleForEdge(node1, node2),
  arrowheadStyle: getArrowForStyle(node1,node2)
});

//inner is the graph element
inner.selectAll("g.edgeLabel").on("click", function(id) {
   selectEdge(id);
});
于 2017-01-05T19:32:34.623 回答
0

看起来该<path>元素没有fill. 你能改变或fill: none使整个区域可点击吗?fill: whitefill: transparent

于 2015-10-28T22:49:57.207 回答