And*_*ise 8 javascript svg d3.js
基本论述:我有点像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);
});
})();
};
Run Code Online (Sandbox Code Playgroud)
结果是一个很好的起始转换,然后在A点和B点之间快速跳转,而不会使该duration(4000)位生效.我也尝试删除底部的行(d3.select(this).remove())然后在每次调用的顶部追加一个新的重复().我也尝试过重置x1,x2,y1和y2并完全跳过转换.我并不是说我正确地尝试了这些,但我的结果要么根本没有线,无限的线,要么是到达B点的一条线并且停留在那里.
关于如何实现我(可能非常简单)的目标的任何其他建议?非常感谢你的帮助!
jsh*_*ley 14
在我看来,你不需要两次指定起始坐标.你可以在repeat函数中分配初始坐标并立即调用它:
function timeForTimeline() {
var timeline = svg.append("line")
.attr("stroke", "steelblue");
repeat();
function repeat() {
timeline.attr({
'x1': 0,
'y1': 130,
'x2': 168,
'y2': 130
})
.transition()
.duration(4000)
.ease("linear")
.attr({
'x1': 0,
'y1': 430,
'x2': 168,
'y2': 430
})
.each("end", repeat);
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个小提琴
| 归档时间: |
|
| 查看次数: |
8374 次 |
| 最近记录: |