【发布时间】:2016-08-25 23:50:03
【问题描述】:
//气泡图基础。 http://jsfiddle.net/NYEaX/1450/
我正在尝试为气泡设置动画——通过改变它们的比例——如果可能的话,让它们淡入淡出。在某个阶段,我需要用某种重力将它们聚集在一起以占据更多的包含圆周。
(function() {
var diameter = 250;
var svg = d3.select('#graph').append('svg')
.attr('width', diameter)
.attr('height', diameter);
var bubble = d3.layout.pack()
.size([diameter, diameter])
.value(function(d) {
return d.size;
})
.padding(3);
var color = d3.scale.ordinal()
.domain(["Lorem ipsum", "dolor sit", "amet", "consectetur", "adipisicing"])
.range(["#98abc5", "#8a89a6", "#7b6888", "#6b486b", "#a05d56"]);
function randomData() {
var data1 = {
"children": [
{
name: "AA",
className: "aa",
size: 170
},
{
name: "BB",
className: "bb",
size: 393
},
{
name: "CC",
className: "cc",
size: 293
},
{
name: "DD",
className: "dd",
size: 89
}
]
};
var data2 = {
"children": [
{
name: "AA",
className: "aa",
size: 120
},
{
name: "BB",
className: "bb",
size: 123
},
{
name: "CC",
className: "cc",
size: 193
},
{
name: "DD",
className: "dd",
size: 289
}
]
};
var j = Math.floor((Math.random() * 2) + 1);
console.log("j", j);
if (j == 1) {
return data1;
} else {
return data2;
}
}
change(randomData());
d3.select(".randomize")
.on("click", function() {
change(randomData());
});
function change(data) {
console.log("data", data);
// generate data with calculated layout values
var nodes = bubble.nodes(data)
.filter(function(d) {
return !d.children;
}); // filter out the outer bubble
var vis = svg.selectAll('circle')
.data(nodes);
vis.enter()
.insert("circle")
.attr('transform', function(d) {
return 'translate(' + d.x + ',' + d.y + ')';
})
.attr('r', function(d) {
return d.r;
})
.style("fill", function(d) {
return color(d.name);
})
.attr('class', function(d) {
return d.className;
});
vis
.transition().duration(1000)
vis.exit()
.remove();
};
})();
【问题讨论】:
-
我在气泡上有动画 - 但它仍然不对jsfiddle.net/NYEaX/1457
-
bubbles = bubbles.transition() .transition() .duration(2000) .attr('transform', function(d) { return 'translate(' + d.x + ',' + d.y + ')'; }) .attr('r', function(d) { //console.log("dr", d.r) return d.r; }) .ease('sine')
-
您要解决的问题是什么?
-
@ksav - 实际上这个图表的一个更大的问题 - stackoverflow.com/questions/39153035/… - 我需要气泡对应,吸引到它们的父饼片 - 所以橙色片附近的橙色气泡,红色切片附近的红色气泡——并且在动画期间也能有效地工作
标签: javascript d3.js