1

我在此处提供的可缩放冰柱布局示例中添加了标签:http: //bl.ocks.org/mbostock/1005873

我使用以下方法根据可用空间旋转标签:

.attr("transform", function (d) {
     return (x(d.x + d.dx) - x(d.x)) > 50 ?
          ("translate(" + (x(d.x + d.dx / 2)) + "," + (y(d.y + d.dy / 2)) + ")rotate(0)") :
          ("translate(" + (x(d.x + d.dx / 2)) + "," + (y(d.y + d.dy / 2)) + ")rotate(90)"); })

如果空间太小而无法保持水平,它会将标签旋转 90'。

我想知道的是如何获得每个 d 的旋转值?

4

1 回答 1

0

您可以抽象出确定旋转角度的代码,将表达式简化为:

function rotation(d, x) {
    return (x(d.x + d.dx) - x(d.x)) > 50 ? 0 : 90;
}

// ...
.attr("transform", function (d) {  
      return "translate(" + [(x(d.x + d.dx / 2)), (y(d.y + d.dy / 2))] + ")" +  
             "rotate(" + rotation(d, x) + ")";
})

然后,每当您需要绑定到 data 的点的旋转值时d,请调用rotation(d, x).

于 2013-12-17T07:28:25.123 回答