【问题标题】:Does d3.js support dynamic Sunburstsd3.js 是否支持动态 Sunbursts
【发布时间】:2013-01-30 14:28:11
【问题描述】:

我想创建一个从

看到的功能的混搭

http://bl.ocks.org/4063423http://philogb.github.com/jit/static/v20/Jit/Examples/Sunburst/example2.html

我想使用 d3.js 或至少一个纯 javascript 解决方案,但该解决方案将响应鼠标点击以显示有关所选部分的更多信息。

放大和缩小不是强制性的,但如果我能做到,那就太好了。

现在我的问题是,是否有一个框架可以支持这一点,还是我必须自己将它们混合起来。

免责声明:谷歌没有那么有帮助!

【问题讨论】:

  • 在 D3 内可以。 D3 sunburst 中的每个元素都是一个 SVG 路径,可以像任何其他 DOM 元素一样分配点击事件。后来(我认为是 1.6+?)版本的 jQuery 可以这样做,就好像 SVG 元素是一个 div。我相信使用 D3 本身有一种更简单的方法 - 检查文档。另一个例子看起来是HTML5 canvas not SVG(或者可能是在画布上绘制的 SVG?),所以我会点击 D3 文档并构建一些东西来切换来自每个 SVG 路径的数据 div,而不是尝试合并两者。跨度>
  • 缩放到底是什么意思?只需放大以查看较小的元素或分层缩放,例如:bl.ocks.org/4348373 ?
  • @musically_ut 放大和缩小以查看元素详细信息,如下所示:jasondavies.com/coffee-wheel

标签: javascript d3.js sunburst-diagram


【解决方案1】:

单独使用 D3 很容易:http://bl.ocks.org/4678148 如果您单击任何元素,该元素将聚焦并转换为 90 度,并在其上设置 selected 类。

此外,右上角的图例文本会更改为所选元素的名称。实现这种耦合的部分代码是:

d3.selectAll("path").on("click", function (d, i) {
  var newAngle = - (d.x + d.dx / 2);

  innerG
    .transition()
      .duration(1500)
      .attr("transform", "rotate(" + (180 / Math.PI * newAngle) + ")");

  // Set the class "selected" on the chosen element.
  path
    .classed("selected", function (x) { return d.name == x.name; });

  // Update the text box with the right context
  // This can be arbitrarily complex to show as many details about the
  // object as required.
  textBox.data(["Clicked: " + d.name])
      .text(String);
});

更新

对于可缩放的行为,例如单击的元素过渡到中心,您可以使用与 herehere 几乎相同的代码。我对代码做了一些小改动,以显示如何提取有关单击了哪个项目的信息:http://bl.ocks.org/4747342

所需的代码更改比以前更简单:

d3.selectAll("path").on("click", function (d, i) {  

  // Zooming
  path.transition()
    .duration(750)
    .attrTween("d", arcTween(d));

  // Update the text box with the right context
  // This can be arbitrarily complex to show as many details about the
  // object as required.
  textBox.data(["Clicked: " + d.name])
      .text(String);
});

【讨论】:

  • 本以为简单,没想到这么简单!我猜是冷脚,加上我是 d3.js 的新手,并不是我在找借口;(谢谢。
猜你喜欢
  • 2014-02-04
  • 1970-01-01
  • 2011-11-10
  • 2014-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多