我创造了一个
D3
像这样的图表
http://jsfiddle.net/gs6rehnx/2042/
<button type="button" onclick="createPie()">Click Me First!</button>
<button type="button" onclick="updatePie()">Update Diagram!</button>
<div class='foo'></div>
const width = 260;
const height = 260;
const thickness = 40;
const duration = 750;
const radius = Math.min(width, height) / 2;
const color = d3.scaleOrdinal(d3.schemeCategory10);
const arc = d3
.arc()
.innerRadius(radius - thickness)
.outerRadius(radius);
const pie = d3
.pie()
.value(function(d) {
return d.value;
})
.sort(null);
const create = function(data) {
const svg = d3
.select('.foo')
.append('svg')
.attr('class', 'pie')
.attr('width', width)
.attr('height', height);
svg
.append('g')
.attr('transform', 'translate(' + width / 2 + ',' + height / 2 + ')')
.attr('id', 'bar');
draw(data);
}
const draw = function(data) {
const path = d3.select('#bar')
.selectAll('path')
.data(pie(data))
path
.enter()
.append('g')
.append('path')
.attr('d', arc)
.attr('fill', (d, i) => color(i));
path
.transition()
.duration(duration)
.attrTween('d', function(d) {
const interpolate = d3.interpolate({
startAngle: 0,
endAngle: 0
}, d);
return function(t) {
return arc(interpolate(t));
};
});
};
const data = [{
name: 'USA',
value: 50
},
{
name: 'UK',
value: 5
},
{
name: 'Canada',
value: 5
},
{
name: 'Maxico',
value: 40
}
]
function createPie() {
create(data)
}
const newData = [{
name: 'USA',
value: 40
},
{
name: 'UK',
value: 20
},
{
name: 'Canada',
value: 30
},
{
name: 'Maxico',
value: 10
}
];
function updatePie() {
draw(newData)
}
单击
Click Me First!
Update Diagram!
按钮,转换工作。为什么单击第一个按钮就不起作用?