我正在尝试使用 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);
});
}
我对这个小提琴有很多问题,但我主要担心的两个问题是:
1)如何做到这一点,以便当我第二次单击新框时,框会相应移动(即,当我最初单击框时,旧框向右移动并出现一个新框,但是当我单击时新盒子,旧盒子不会向右移动)。
2)为什么当我点击新框时,新框之间的间距很大?(仅在尝试将 3 个框放在屏幕上后才会发生)。
感谢任何提示表示赞赏!