【发布时间】:2014-04-23 00:54:09
【问题描述】:
基本说明:我有点 D3 新手。
我的目标是让一条线从 A 点移动到 B 点,然后立即重新出现在 A 点并重复该过渡。我尝试了很多不同的方法,但这是我最接近的一次。
var svg = d3.select("body")
.append("svg")
.attr("width", 500)
.attr("height", 500);
// code, code, code, irrelevant code...
function timeForTimeline(){ // har
var timeline = svg.append("line")
.attr("stroke", "steelblue")
.attr({
'x1': 0,
'y1': 130,
'x2': 168,
'y2': 130
});
(function repeat() {
timeline = timeline
.transition()
.duration(4000)
.ease("linear")
.attr({
'x1': 0,
'y1': 430,
'x2': 168,
'y2': 430
})
.each("end", function(){
d3.select(this)
.transition()
.duration(0)
.attr({
'x1': 0,
'y1': 130,
'x2': 168,
'y2': 130
})
.each("end", repeat);
});
})();
};
结果是一个出色的起始过渡,随后线在 A 点和 B 点之间快速跳转,而 duration(4000) 位未生效。我还尝试删除底部的行 (d3.select(this).remove()),然后在每次调用 repeat() 的顶部添加一个新行。我也尝试过重置 x1、x2、y1 和 y2 并完全跳过过渡。我并不是说我尝试正确,但我的结果要么根本没有线,要么是无限的线,要么是一条到达 B 点并停留在那里的线。
关于如何实现我的(可能非常简单)目标的任何其他建议?非常感谢您的帮助!
【问题讨论】:
标签: javascript svg d3.js