【发布时间】:2017-04-04 20:56:24
【问题描述】:
我刚开始在 D3 中使用 Tweening,一开始看起来很容易,但现在我正在努力在我当前的代码中实现这一点:
- 补间到特定点,例如:从 0,0 到 lineData[4]
- 从 lineData[4] 补间回到点 0,0
(可能使用按钮来控制)
这是我目前的代码:https://jsfiddle.net/uozko2bw/2/
//The data for our line
var lineData = [
{ "x": 1, "y": 5}, { "x": 20, "y": 20},
{ "x": 40, "y": 10}, { "x": 60, "y": 40},
{ "x": 80, "y": 5}, { "x": 100, "y": 60}];
var lineFunction = d3.line()
.x(function(d) { return d.x; })
.y(function(d) { return d.y; })
.curve(d3.curveCardinal);
//The SVG Container
var svgContainer = d3.select("body").append("svg")
.attr("width", 200)
.attr("height", 200);
//The line SVG Path we draw
var lineGraph = svgContainer.append("path")
.attr("d", lineFunction(lineData))
.attr("stroke", "blue")
.attr("stroke-width", 2)
.attr("fill", "none");
var circle = svgContainer.append("circle")
.attr("r", 5)
.attr("transform", "translate(" + lineData[0].x + "," + lineData[0].y +
")");
transition();
function transition() {
circle.transition()
.duration(10000)
.attrTween("transform", translateAlong(lineGraph.node()))
.each("end", transition);
}
function translateAlong(path) {
var l = path.getTotalLength();
return function(d, i, a) {
return function(t) {
var p = path.getPointAtLength(t * l);
return "translate(" + p.x + "," + p.y + ")";
};
};
}
【问题讨论】:
标签: javascript d3.js data-visualization