【问题标题】:stop d3 circle pack labels from overlapping阻止 d3 圆形包装标签重叠
【发布时间】:2015-05-14 22:36:37
【问题描述】:

卡在重叠的标签上。举例说明:JSFIDDLE

  1. 单击文本标签“A 组”。缩放过渡后, A 组标签仍然与小圆圈的标签重叠。
  2. 点击其他地方缩小。
  3. 再次单击“A 组”。这次标签没有保留,所以 没有重叠。所以它似乎会在一段时间后自行修复。

我不希望在第一次单击某些内容时发生重叠。我该怎么做呢?我不想截断标签或重新定位标签。

我一直在摆弄这一点,但到目前为止没有运气。

transition.selectAll("text")
        .filter(function(d) { return d.parent === focus || this.style.display === "inline"; })
        .style("fill-opacity", function(d) { return d.parent === focus ? 1 : 0; })
        .each("start", function(d) { if (d.parent === focus) this.style.display = "inline"; })
        .each("end", function(d) { if (d.parent !== focus) this.style.display = "none"; });

仅供参考,如果第一次点击是在中等圆圈上,也会发生这种情况。

This post gets close,通过说它可以使用包输出来限制可见性,但没有说明如何实现它。

所以基本上我正在尝试做这样的事情:“如果放大到中等或小圆圈的水平,不要显示中等圆圈标签。”

谢谢。

【问题讨论】:

    标签: javascript d3.js label zooming circle-pack


    【解决方案1】:

    我也有同样的问题。我发现缩放功能的特定部分,如果在生成初始视图后立即应用于根,可以解决此问题。将此代码添加到 d3.json 文件的末尾应该可以解决问题。仍在研究更好的解决方案。

    init(root)
    function init(d) {
      var transition = d3.transition()
      transition.selectAll("text")
        .each("start", function(d) {
          if (d.parent === focus) this.style.display = "inline";
        });
    }
    

    【讨论】:

    • 轰隆隆!做到了,谢谢。这是有道理的,您必须在初始视图之后立即在那里进行修复,并且您想通了。非常感谢! JSFIDDLE ANSWER(虽然这在 jsfiddle 结果窗格中不起作用,但您必须运行它。
    猜你喜欢
    • 2015-10-15
    • 2015-03-12
    • 1970-01-01
    • 2020-11-14
    • 2012-08-30
    • 2014-04-30
    • 2013-07-21
    • 1970-01-01
    • 2015-07-22
    相关资源
    最近更新 更多