【发布时间】:2016-11-26 19:59:18
【问题描述】:
我正在尝试重写上面这个示例的一部分以在我的代码中使用,特别是这一部分:
function centerNode(source) {
scale = zoomListener.scale();
x = -source.y0;
y = -source.x0;
x = x * scale + viewerWidth / 2;
y = y * scale + viewerHeight / 2;
d3.select('g').transition()
.duration(duration)
.attr("transform", "translate(" + x + "," + y + ")scale(" + scale + ")");
zoomListener.scale(scale);
zoomListener.translate([x, y]);
}
但是,由于 v4 软件包发生了很大变化,因此我陷入了困境。我将 zoomListener 函数编写为
var zoomListener = d3.zoom()
.scaleExtent([0.3,2])
.on("zoom", zoomed);
function zoomed() {
transform = d3.event.transform;
console.log(d3.event);
svg.attr("transform", transform);
}
function centerNode(source){
t = transform;
console.log(t);
x = t.x*t.k; //I only want things to be centered vertically
y = (t.y + -source.x0)*t.k + (viewerHeight)/2 ;
svg.transition()
.duration(duration)
.attr("transform","translate(" + x + "," + y +")scale(" + t.k + ")");
transform.scale(t.k); //DOES NOT WORK
transform.translate([x, y]); //DOES NOT WORK
}
我知道根据文档,事情已经发生了变化,信息不再存储在我的 zoomListener 上 D3 V4 release note on zoom 我想我只是对如何使用新版本进行操作感到困惑。我的 centerNode 函数的最后几行不起作用,这意味着当我将节点居中时,缩放和平移重置...
有什么建议吗?
【问题讨论】:
标签: javascript tree zooming d3.js