使用d3.js动画弧起始角度

时间:2018-10-23 09:56:29

标签: javascript css animation svg tween

我正在尝试使用D3.js动画化圆弧的起始角度

任何帮助或参考链接都可以。

我尝试了以下方法:

http://jsfiddle.net/87e3d4tj/

d3.select('#my-path').datum({
      startAngle: endAngle,
      endAngle: ( 90 * (Math.PI/180) )
    })
    .transition()
    .duration(duration)
    .attrTween('d', d => {
      var interpolate = d3.interpolate(d.startAngle, d.endAngle);
      return function(t) {
        d.endAngle = endAngle;
        d.startAngle = interpolate(t);
        return arc(d);
      };
    });

1 个答案:

答案 0 :(得分:0)

我尝试了以下方法,希望您也能找到同样的方法。

https://jsfiddle.net/debasish007/eu7xo4mL/

var width = 400,
    height = 400,
    τ = (Math.PI/180);
var arc = d3.arc()
    .innerRadius(130)
    .outerRadius(150);

var svg = d3.select("svg")
    .attr("width", width)
    .attr("height", height)
    .append("g")
    .attr("transform", "translate(" + width / 2 + "," + height / 2 + ")")


var foreground = svg.append("path")
    .datum({
    endAngle: 90 * τ,
    startAngle: -90 * τ
})
    .style("fill", "blue")
    .attr("d", arc);

setTimeout(function () {
    foreground.transition()
        .duration(750)
        .call(arcTween, -30 * τ, 90 * τ);
}, 1500);

function arcTween(transition, newStartAngle, newFinishAngle) {

    transition.attrTween("d", function (d) {
        var interpolateStart = d3.interpolate(d.startAngle, newStartAngle);
        return function (t) {
                d.endAngle = newFinishAngle;
            d.startAngle = interpolateStart(t);
            return arc(d);
        };
    });
}