【问题标题】:Adding anchor tag to SVG circles appended with D3将锚标记添加到附加了 D3 的 SVG 圆圈
【发布时间】:2014-06-30 03:47:58
【问题描述】:

我有一个用 D3 生成的 SVG 符号映射。该地图包含 100 多个符号。我的问题是,如何为每个单独的圈子添加一个锚标签?我将从外部 CSV 文件中提取每个符号的链接,但此时我无法弄清楚如何为每个符号添加锚点。

我的符号生成/附加如下:

circles.selectAll("circles")
            .data(schools)
            .enter().append("svg:circle")
            .attr("cx", function(d,i) {return positions[i][0]})
            .attr("cy", function(d,i) {return positions[i][1]})
            .attr("r", function(d,i) {return 6})
            .attr("i", function(d,i) {return i})
            .attr("class", "symbol")
            .on("mouseover", function(d,i){
                    var index = $(this).attr("i");
                    // console.log(d);  ****This is all the data - ie: Name, lat, long, index, state, etc..
                    return show_bubble(d, index);
            }).on("mouseout", function(){
                    return hide_bubble();
            }).on("mousemove", function() {
                    return move_bubble();
            })

我试过了:

d3.selectAll("#circles")
    .append("a")
    .attr("href", "google.com");

然而,这只是将我的整个组包含在一个锚标记中的符号。

请帮忙!

【问题讨论】:

  • 如果您只想在用户点击时导航,您可以轻松添加点击事件?

标签: svg d3.js append


【解决方案1】:

我通常在圆圈中做文本的方式是我对数据进行另一个绑定,但我不会附加圆圈,而是附加文本。

所以代码可能如下所示:

circles.selectAll("circle-text")
  .data(schools)
  .enter().append("text")
  .attr("x", function(d,i) {return positions[i][0]})
  .attr("y", function(d,i) {return positions[i][1]})
  .text( function (d) { return "Hello World" });

如果您想要锚标签而不是纯文本,请尝试阅读以下示例:Hyperlinks in d3.js objects

您似乎需要一个特殊元素:“svg:a”来创建超链接。

希望这会有所帮助。

【讨论】:

  • 感谢您的回复。这确实附加了一个与圆圈协调的标签,但我需要做的是将每个附加的圆圈包装在一个标签中。这样整个圈子就变成了一个链接。此外,x 和 y 值无法正确定位锚点。有什么想法吗?
  • 你必须附加一个'a'类型的标签才能使超链接工作,所以首先附加一个'a'类型的标签,然后附加一个'circle'类型的标签,这样圆圈就在里面一个。此外,如果 x 和 y 值没有正确定位,您将不得不开始添加像素。
  • 谢谢,成功了!也感谢其他回复,大量的帮助。
猜你喜欢
  • 2014-05-26
  • 2012-11-16
  • 1970-01-01
  • 1970-01-01
  • 2021-10-06
  • 1970-01-01
  • 2020-03-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多