我在执行缩放时让 D3 执行正确的刷牙时遇到问题。
我在这里创建了一个 jsFiddlehttp://jsfiddle.net/Gwp25/2/ http://jsfiddle.net/Gwp25/2/用我在其他地方找到的一些虚拟数据显示网络。接下来的操作是这样的。放大(使用鼠标滚轮),然后打开画笔。完成此操作后,刷节点。选定的节点已关闭 - 一些节点超出了画笔区域。这是处理画笔范围内节点选择的代码的相关部分。
.on("brush", function() {
var extent = d3.event.target.extent();
console.log(extent);
d3.selectAll(".node").select("circle").classed("selected", function(d) {
return d.selected = (extent[0][0] <= x_scale(d.x) && x_scale(d.x) < extent[1][0]
&& extent[0][1] <= d3.tran(d.y) && y_scale(d.y) < extent[1][1]);
});
})
有谁有办法解决这个问题。我知道这与节点及其原始位置和 x 有关,但我不太确定如何获取节点 x 和 y 相对于其缩放位置的信息。
有任何想法吗?
我相信我有您正在寻找的工作版本:http://jsfiddle.net/Gwp25/8/ http://jsfiddle.net/Gwp25/8/
你已经接近实施了。我将解释我更改了什么以使其发挥作用。
首先,我将秤附加到zoom
功能。这很重要,因为 d3 会在您放大和缩小时自动更新它们。需要注意的是,我没有使用您的身份量表。如果您使用身份比例 d3 缩放行为将不会更新比例。以下是我创建的比例,在没有缩放时与您的比例相同:
var x_scale = d3.scale.linear().domain([0, chartWidth]).range([0, chartWidth]);
var y_scale = d3.scale.linear().domain([0, chartHeight]).range([0, chartHeight]);
Now the brush
也将尺度作为参数。这是您错误地放置原始身份尺度的地方。因此,即使图表被缩放和平移,您也使用相同的比例将点映射到新缩放的图表。
为了养活brush
正确的比例,您可以通过调用以下方式访问缩放行为的比例:zoom.x()
or zoom.y()
.
一旦你完成了这个,剩下的就是肉汁了。
注意:我对代码进行了一些修改,以便我可以访问您的缩放功能toggleBrushing
使其成为全局变量。我不建议保持这种方式,但我不想进行大量重构。祝你好运,希望有帮助!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)