D3.js 甜甜圈过渡
D3.js Donut transition
我正在研究 d3 甜甜圈,我一直在研究如何更新甜甜圈值,如果您将值从 42 更改为 17,该值将回流。
我可以删除 svg,但随后它会从零位置重写新值 (17)。
我希望它从 42 倒流到 17。
var path = svg.selectAll("path")
.data(pie(dataset.lower))
.enter().append("path")
.attr("class", function(d, i) { return "color" + i })
.attr("d", arc)
.each(function(d) { this._current = d; }); // store the initial values
这是我的 jsfidle link http://jsfiddle.net/yr595n96/
我很乐意提供任何帮助。
谢谢
这是您的新按钮点击:
$("#next").click(function () {
percent = 17;
var progress = 0;
var timeout = setTimeout(function () {
clearTimeout(timeout);
var randNumber = Math.random() * (100 - 0 + 1) + 0;
//path = path.data(pie(calcPercent(17))); // update the data << change this
path = path.data(pie(calcPercent(randNumber)));
path.transition().duration(duration).attrTween("d", function (a) {
// Store the displayed angles in _current.
// Then, interpolate from _current to the new angles.
// During the transition, _current is updated in-place by d3.interpolate.
var i = d3.interpolate(this._current, a);
var i2 = d3.interpolate(progress, randNumber)
this._current = i(0);
return function(t) {
text.text( format(i2(t) / 100) );
return arc(i(t));
};
}); // redraw the arcs
}, 100);
});
第'8'行通知:
path = path.data(pie(calcPercent(randNumber)));
您需要传递新数据才能过渡到。我在这里使用了一个随机数只是为了向您展示任何数字都有效。我为此创建了一个变量并将其传递给 'path' 和文本:'i2' > d3.interpolate.
您可以随时将其更改为 17 以适合您的要求:)
已更新 fiddle:http://jsfiddle.net/yr595n96/3/
我正在研究 d3 甜甜圈,我一直在研究如何更新甜甜圈值,如果您将值从 42 更改为 17,该值将回流。 我可以删除 svg,但随后它会从零位置重写新值 (17)。
我希望它从 42 倒流到 17。
var path = svg.selectAll("path")
.data(pie(dataset.lower))
.enter().append("path")
.attr("class", function(d, i) { return "color" + i })
.attr("d", arc)
.each(function(d) { this._current = d; }); // store the initial values
这是我的 jsfidle link http://jsfiddle.net/yr595n96/
我很乐意提供任何帮助。
谢谢
这是您的新按钮点击:
$("#next").click(function () {
percent = 17;
var progress = 0;
var timeout = setTimeout(function () {
clearTimeout(timeout);
var randNumber = Math.random() * (100 - 0 + 1) + 0;
//path = path.data(pie(calcPercent(17))); // update the data << change this
path = path.data(pie(calcPercent(randNumber)));
path.transition().duration(duration).attrTween("d", function (a) {
// Store the displayed angles in _current.
// Then, interpolate from _current to the new angles.
// During the transition, _current is updated in-place by d3.interpolate.
var i = d3.interpolate(this._current, a);
var i2 = d3.interpolate(progress, randNumber)
this._current = i(0);
return function(t) {
text.text( format(i2(t) / 100) );
return arc(i(t));
};
}); // redraw the arcs
}, 100);
});
第'8'行通知:
path = path.data(pie(calcPercent(randNumber)));
您需要传递新数据才能过渡到。我在这里使用了一个随机数只是为了向您展示任何数字都有效。我为此创建了一个变量并将其传递给 'path' 和文本:'i2' > d3.interpolate.
您可以随时将其更改为 17 以适合您的要求:)
已更新 fiddle:http://jsfiddle.net/yr595n96/3/