javascript - D3.js 过渡多个弧路径

标签 javascript animation d3.js data-visualization

我有一个测试用例,用于使用 arcTween 函数对多个弧进行动画处理,但问题是我收到每个弧转换调用都会引发的错误

错误:解析时出现问题 d="M0,-52.5A52.5,52.5 0 1,1 NaN,NaNLNaN,NaNA42.5,42.5 0 1,0 0,-42.5Z"

我想知道是否有人知道我在哪里遗漏了某些内容以及如何修复此错误。

这是 fiddle http://jsfiddle.net/XuhVa/

var dataset = [
{
    "vendor-name":"HP",
    "overall-score":45
},
{
    "vendor-name":"CQ",
    "overall-score":86
},
{
    "vendor-name":"Tridion",
    "overall-score":73
},
{
    "vendor-name":"Sharepoint Server",
    "overall-score":99
},
{
    "vendor-name":"Drupal",
    "overall-score":24
},
{
    "vendor-name":"SiteCore",
    "overall-score":57
}
];

var width = 105
    , height = 105
    , innerRadius = 85;

var drawArc = d3.svg.arc()
    .innerRadius(innerRadius/2)
    .outerRadius(width/2)
    .startAngle(0);

var s = d3.selectAll('.score')
    .data( dataset )
    .enter()
    .append('svg')
    .attr('width', width)
    .attr('height', height)    
    .append('g')
    .attr("transform", "translate(" + width/2  + "," + height/2  + ")");

//creating background circle
s.append("circle")
    .attr("fill", "#ffffff")
    .attr("stroke", "#dfe5e6")
    .attr("stroke-width", 1)
    .attr('r', width / 2);

//creating arc path
var arc = s.append("path")
    .attr("fill", "#21addd")
    .attr('class', 'arc')
    .attr('d', drawArc);

//transition arc path from start angle to end angle
arc.transition()
    .duration(750)
    .delay(300)
    .ease('bounce')
    .call(arcTween, this );

//percentage value
s.append('text')
    .text(function(d){
        return d['overall-score'];
    })
    .attr("class", "perc")
    .attr("text-anchor", "middle")
    .attr('font-size', '36px')                        
    .attr("y", +10);


function arcTween(transition, newAngle) {

    transition.attrTween("d", function(d) {

        var interpolate = d3.interpolate( 0, 360*( d['overall-score']/100) * Math.PI/180    );

        return function(t) {

            d.endAngle = interpolate(t)

            return drawArc(d);
        };
    });
}

最佳答案

问题是最初没有设置endAngle。这意味着弧路径的第一次计算将返回 NaN 值。要修复此问题,只需将 endAngle 初始化为 0。

arc.each(function(d) { d.endAngle = 0; });

修改jsfiddle here .

关于javascript - D3.js 过渡多个弧路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20480739/

相关文章:

node.js - JSON 动画导出为视频 mpeg

javascript - 将 id 从模型传递到 View Backbone.js

Javascript:淡入和淡出

javascript - 我可以在 Javascript 中为我创建的对象创建自定义事件吗?

ios - 如何将手势和动画结合在一起

d3.js - D3 如何从组中选择具有共享属性的多个形状?

javascript - 如何实现Node.js的图片服务

javascript - Recharts:关闭条形图的背景悬停

javascript - 如何让 Jquery 在页面的特定区域展开一个 div?

javascript - 用户在表单中提交错误的电子邮件后如何回滚到之前的状态