【问题标题】:Appended text not appearing when using D3使用 D3 时未出现附加文本
【发布时间】:2013-06-13 20:04:47
【问题描述】:

我试图让这个文本在鼠标悬停时显示,但它不起作用,谁能提供一些见解?文档中有多个圆圈,我希望每个圆圈在鼠标悬停时显示开销文本。当前表单应该到处显示“你好”,但什么都没有。

  d3.selectAll("circle")
    .on("mouseover",function(d){

    var x = parseFloat( d3.select(this).attr("cx") );
    var y = parseFloat( d3.select(this).attr("cy") );

    d3.selectAll("circle")
       .append("text")
       .attr("class","tooltipText")
       .attr("x",x)
       .attr("y",y)
       .attr("stroke-width",1)
       .attr("fill", "white")
       .attr("font-size", "13px")
       .attr("text-anchor", "middle")

       .text(function(){

          return "hello";

       });

    });

【问题讨论】:

  • This answer 可能会有所帮助。
  • 这部分只是让我感到困惑,因为没有错误。 (所有变量的console.logs 也有效)但没有显示。
  • 如果您将text 对象附加到circle,它将不会显示。见here
  • 啊,我明白了,我让它使用 svg.append 为单个圈子工作,但想同时将文本附加到所有圈子。我可以给每个圈子一个类名并选择它吗?
  • 补充一下,文档的每一部分都是一个组,但每组都是由矩形和圆形组成的。我只希望标签出现在圆圈上。 (但所有组中的所有圆圈)

标签: d3.js


【解决方案1】:

您应该将您的圈子封装在 g 元素中。这些将充当 HTML 中的<div> 标记。您可以为这些元素添加class 属性,以便之后轻松选择它们。

//circles creation
var circles = d3.selectAll('svg').append('svg')
              .append('g').attr('class', 'circles').data( someData );

circles.enter().append('g').attr('class', 'circle')
               .append('circle')
                 .attr('cx', function(d) { return xScale(d); })
                 .attr('cy', function(d) { return yScale(d); })
               .append('text').attr('style', 'display:none;')
                 .text(function(d) { return d.title; })
                 .attr('x', function(d) { return xScale(d); })
                 .attr('y', function(d) { return yScale(d) + 2*radius(d); });

d3.selectAll('.circle').on('mouseover', function( data, index, element ) {
    d3.select( element ).attr('style', '');
});

注意xScale, yScale, radius都是数据的函数。

【讨论】:

  • 好的,谢谢 =)。我仍在尝试对组和选择进行非神奇的理解。我现在有 2 个“图表”,每个“图表”分别是“g1”组:[circle1_1,box1,circle1_2],“g2”[circle2_1,box2,circle2_2],我用 (g1/g2) 选择它们以更改颜色等内容,以及“ g3":[circle1_1,circle1_2,circle2_1,circle2_2] 对所有圈子做事。
  • 别忘了,你总是可以使用简单的 css 规则来改变颜色、笔画宽度等...
  • 为什么不封装在组中的元素不显示?很抱歉,如果这很明显。
  • @yifanwu 不是不显示,而是需要对一组元素进行转换,这样才能正确定位
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-02
  • 2022-01-16
  • 1970-01-01
  • 2016-03-12
  • 2014-10-09
  • 2014-01-05
相关资源
最近更新 更多