1
我有一些行,我將它們作爲一個組。在轉變發生的時候是否可以單獨移動它們?D3.js轉換內部
我用棍子男人做了一個小例子來展示案例。在他向右移動時他應該移動一隻手臂。但手臂保持後退。
var mode = "Transition";
var bodySelection = d3.select("body");
var divButton = bodySelection.append("div");
var button = divButton.append("button")
.attr("id","button")
.text(mode);
var svg = bodySelection.append("svg")
.attr("width",800)
.attr("height",600)
.style("fill","red");
var chest = svg.append("line")
.attr("x1",100)
.attr("y1",100)
.attr("x2",100)
.attr("y2",50)
.attr("stroke-width", 2)
.attr("stroke", "black");
var legL = svg.append("line")
.attr("x1",100)
.attr("y1",100)
.attr("x2",80)
.attr("y2",130)
.attr("stroke-width", 2)
.attr("stroke", "black");
var legR = svg.append("line")
.attr("x1",100)
.attr("y1",100)
.attr("x2",120)
.attr("y2",130)
.attr("stroke-width", 2)
.attr("stroke", "black");
var head = svg.append("circle")
.attr("cx",100)
.attr("cy",35)
.attr("r",15)
.attr("fill","black");
var armL = svg.append("line")
.attr("x1",100)
.attr("y1",60)
.attr("x2",80)
.attr("y2",75)
.attr("stroke-width", 2)
.attr("stroke", "black")
.on('click', function(){
console.log('polyline click');
console.log(this.getAttribute('x2'));
});
var armR = svg.append("line")
.attr("x1",100)
.attr("y1",60)
.attr("x2",120)
.attr("y2",75)
.attr("stroke-width", 2)
.attr("stroke", "black");
var body = svg.selectAll("line,circle");
button.on("click", function() {
if(mode=="Transition")
{
moveBody(200);
moveArmL();
mode="Reset";
}
else if(mode=="Reset")
{
moveBody(0);
mode="Transition";
}
button.text(mode);
})
function moveBody(x)
{
body.transition()
.attr("transform", "translate(" + x + ",0)")
.duration(1000);
}
function moveArmL()
{
armL.transition()
.attr("x2",90)
.duration(500)
.transition()
.attr("x2",80)
.duration(500);
}
感謝您的快速回答! – Kal
我試圖通過保持svg原樣做一些修改,然後添加: var body = svg.append(「g」); 然後移動它: body.transition() 它不起作用。它不會和你的例子一樣嗎? – Kal
沒有它的不同......圓圈和線條被添加到svg的g組中,就像在我的例子中那樣,變形必須發生在那個上面。在你的情況下,你正在向svg添加一個新的g,並且該組沒有任何內容(我的意思是圓圈和線不在其上)。所以當這個組發生變換時,你看不到任何移動。 – Cyril