我使用dimple.js绘制饼图。Dimple.js饼图标签的平滑动画?
我想要饼图的切片内的标签。我使用的John Kiernander's answer to another question修改后的版本与要做到这一点:
mySeries.afterDraw = function (shape, data) {
console.log(myStoryboard)
var ctd = getCentroid(data, myChart),
s = d3.select(shape),
degrees = ((data.startAngle + (data.endAngle - data.startAngle)/2) * 180)/Math.PI;
if (degrees < 180) {
degrees -= 90;
} else {
degrees += 90;
}
if (Math.abs(data.startAngle - data.endAngle) > 0.25) {
myChart._group.append("text")
.attr("id","innerLabel")
.attr("transform", "rotate(" + degrees + ", " + ctd[0] + ", " + ctd[1] + 4 + ")")
.attr("dy", "0.35em")
.attr("x", ctd[0])
.attr("y", ctd[1])
.style("text-anchor", "middle")
.style("pointer-events", "none")
.text(data.aggField[0]);
}
};
的问题是,我也想动画饼图,显示了片随时间变化的大小。
采用上述方法要求我删除,并重新绘制文本每个刻度:
myStoryboard.onTick = function (e) {
svg.selectAll("#innerLabel").remove();
}
所以每剔这些标签遭到移除并重新绘制。不幸的是,删除和重绘它们所需的时间在FF中非常明显(Chrome和IE都不会渲染页面),远远超出了闪烁效果。是否有隐藏的延迟,我可以减少?否则,是否有办法加快速度或平滑地动画文本本身?
数据集非常小,只有15kb,所以如果真的需要这么长时间才能删除并重新绘制标签,我会很惊讶。馅饼最多有11片。
我是一个超新手用Javascript,所以我希望有一个简单的方法来减少闪烁。尝试平滑地动画文字似乎有问题,因为您希望文字与故事板同步移动。
谢谢!
您可以发布您的'getCentroid'函数吗?我无法帮您解决问题,但我试图复制相同类型的行为,这对于这个新手来说非常有用 –
您可以getCentroid函数有 函数getCentroid(data,plot)var centerX = plot.x + plot.width/2, cen ter = plot.y + plot.height/2, angle =(data.startAngle +(data.endAngle - data.startAngle)/ 2), hyp =(data.innerRadius +(data.outerRadius - data.innerRadius)/2), opp = Math.sin(angle)* hyp, adj = Math.cos(angle)* hyp; return [centerX + opp,centerY - adj]; } –