【问题标题】:D3 node text show in tooltipD3 节点文本显示在工具提示中
【发布时间】:2014-06-02 16:56:49
【问题描述】:

我在this location关注代码:

我的 json 文件是这样的

[
{"name":"flare.analytics.A","size":3938,"imports":["flare.analytics.B,flare.analytics.C"]},
{"name":"flare.analytics.B","size":3812,"imports":["flare.analytics.C,flare.analytics.D"]},
{"name":"flare.analytics.C","size":3812,"imports":["flare.analytics.D,flare.analytics.E"]},
{"name":"flare.analytics.D","size":743, "imports":["flare.analytics.E,flare.analytics.F"]},
{"name":"flare.analytics.E","size":3534,"imports":["flare.analytics.F,flare.analytics.G"]},
{"name":"flare.analytics.F","size":5731,"imports":["flare.analytics.G,flare.analytics.H"]},
{"name":"flare.analytics.G","size":7840,"imports":["flare.analytics.H,flare.analytics.I"]},
{"name":"flare.analytics.H","size":5914,"imports":["flare.analytics.I,flare.analytics.A"]},
{"name":"flare.analytics.I","size":3416,"imports":["flare.analytics.B,flare.analytics.A"]}
]

我按照本教程在上面的代码中添加了一个工具提示 http://bl.ocks.org/Caged/6476579.

我加了

.d3-tip in Style section

然后我添加了功能

var tip = d3.tip()
  .attr('class', 'd3-tip')
  .offset([-10, 0])
  .html(function(d) {
    return "<strong>Frequency:</strong> <span style='color:red'>" + d.frequency +     "</span>";
  })

svg.call(tip);

现在在上面的 html 函数而不是 d.frequency 我添加了 d3.select("text").text() 所以它变成了

return "<strong>Frequency:</strong> <span style='color:red'>" + d3.select("text").text() +     "</span>";

在我的鼠标悬停函数中我添加了

node
.classed("mouseover", tip.show);

在mouseouted中我添加了

node
.classed("mouseover", tip.hide);

问题是,它总是从我的树中选择第一个元素并显示为工具提示

我在Show d3 node text only on hover找到了答案。

但我不确定如何将其集成到我的代码中

更新

node = node
  .data(nodes.filter(function(n) { return !n.children; }))
.enter().append("text")
  .attr("class", "node")
  .attr("dx", function(d) { return d.x < 180 ? 8 : -8; })
  .attr("dy", ".31em")
  .attr("transform", function(d) { return "rotate(" + (d.x - 90) + ")translate(" + d.y + ")" + (d.x < 180 ? "" : "rotate(180)"); })
  .style("text-anchor", function(d) { return d.x < 180 ? "start" : "end"; })
  .text(function(d) { return d.key; })
  .on("mouseover", mouseovered)
  .on("mouseout", mouseouted);
});

var tip = d3.tip()
  .attr('class', 'd3-tip')
  .offset([-10, 0])
  .html(function(d) {
    return "<span style='color:red'>" + d3.select("text").text()+ "</span>";
  })

【问题讨论】:

  • 显示的文字是什么?使用与设置工具提示相同的表达式。
  • @LarsKotthoff 无论我悬停什么文字,它每次都会显示“A”,我的 JSON 文件中的第一个字母。问题是它分为两个独立的功能。不知道我将如何合并它们。过渡将如何发生
  • 你能告诉我们你用来设置text元素内容的代码吗?
  • 您是否尝试过在工具提示中也使用d.key
  • 是的。当我添加它时,它会显示最后一个节点而不是第一个节点。即“我”

标签: javascript svg d3.js tooltip bundle-layout


【解决方案1】:

您可以在鼠标悬停功能中设置提示的 html 属性(而不是在您定义“提示”的位置):

function mouseovered(d) {
   tip.html("<strong>Frequency:</strong> <span style='color:red'>" + d.key + "</span>"
);

看到这个小提琴:http://jsfiddle.net/henbox/XqEMf/3/

否则,您将在鼠标悬停之前定义工具提示的值

请注意,您还需要将提示定义更改为:

var tip = d3.tip()
  .attr('class', 'd3-tip')
  .offset([-10, 0]);

【讨论】:

    猜你喜欢
    • 2014-09-05
    • 1970-01-01
    • 1970-01-01
    • 2016-07-09
    • 2022-11-17
    • 1970-01-01
    • 2020-01-08
    • 2022-08-14
    • 2013-08-08
    相关资源
    最近更新 更多