D3.js 在d3js中选择多条路径

D3.js 在d3js中选择多条路径,d3.js,transition,D3.js,Transition,我已经更改了Mike Bostocks的代码,使其成为多个弧之间。我想选择每个弧,并用唯一的值分别设置它们的动画。我现在所做的是 我感到困惑的是选择部分。'foregrounds'选择由3个弧组成,当我转换时,所有的弧都被转换,但动画非常不重要。我还想用唯一的值分别为这些弧设置动画。我在这里要做什么?对每条路径使用ID,并使用loop转换它们,或者d3js中必须有某种方法?在这种情况下,您不需要degToRad——arc generator会为您进行转换。如果你删除它,你会看到更大的变化。要对每

我已经更改了Mike Bostocks的代码,使其成为多个弧之间。我想选择每个弧,并用唯一的值分别设置它们的动画。我现在所做的是


我感到困惑的是选择部分。
'foregrounds'
选择由3个弧组成,当我转换时,所有的弧都被转换,但动画非常不重要。我还想用唯一的值分别为这些弧设置动画。我在这里要做什么?对每条路径使用ID,并使用loop转换它们,或者d3js中必须有某种方法?

在这种情况下,您不需要degToRad——arc generator会为您进行转换。如果你删除它,你会看到更大的变化。要对每个圆弧进行单独的更改,只需计算
arcTween
内部的角度,而不是顶部的角度:

function arcTween(transition) {
  transition.attrTween("d", function(d) {
    var interpolate = d3.interpolate(d.endAngle, getRandomRange(-150,150));
    return function(t) {
      d.endAngle = interpolate(t);
      return arc(d);
    };
  });
}

完整的示例。

非常感谢。但为什么德格托拉德不呢。我在为一个圆弧设置动画时包含了它,它正在工作,但在三个圆弧中,动画是不重要的?您在以度为单位指定的角度之间插值,因此无需转换为rad。
function arcTween(transition) {
  transition.attrTween("d", function(d) {
    var interpolate = d3.interpolate(d.endAngle, getRandomRange(-150,150));
    return function(t) {
      d.endAngle = interpolate(t);
      return arc(d);
    };
  });
}