d3 のパン/ズーム機能を使用して画面にボックスを描画し、ボックスをクリックすると新しいボックスが表示され、残りのボックスが右に移動して新しいボックスが中央にくるようにしようとしていますキャンバスの。パンを使用すると、描画したすべてのボックスをスクロールできます。
これが私のjsfiddleです:http://jsfiddle.net/uUTBE/1/
そして、これがズーム/パンを初期化するための私のコードです: svg.call(d3.behavior.zoom().on("zoom", redraw));
function redraw() {
d3.select(".canvas").attr("transform",
"translate(" + d3.event.translate + ")"
+ " scale(" + d3.event.scale + ")");
}
そして、これがボックスを描画するための私のコードです:
function drawBox(x, y) {
var boxGroup = canvas.append("g");
boxGroup.append("rect")
.attr("x", x)
.attr("y", y)
.attr("height", 100)
.attr("width", 100)
.attr("fill", function () {
var i = Math.floor(Math.random() * 4);
if (i === 1) return "red";
else if (i === 2) return "blue";
else if (i === 3) return "yellow";
else return "green";
})
.on("click", function () {
counter++;
d3.select(".canvas")
.transition()
.duration(1000)
.attr('transform', "translate(300,0)");
drawBox(x - counter * 120, y);
});
}
このフィドルには複数の問題がありますが、主な懸念事項の2つは次のとおりです。
1) 新しいボックスを 2 回目にクリックすると、それに応じてボックスが移動するようにするにはどうすればよいですか (つまり、最初にボックスをクリックすると、古いボックスが右に移動し、新しいボックスが表示されますが、クリックすると新しいボックス、古いボックスは右にシフトしません)。
2) 新しいボックスをクリックすると、新しいボックスの間隔が大きくなるのはなぜですか? (画面に 3 つのボックスを配置しようとした後にのみ発生します)。
ヒントをいただければ幸いです。