gpt4 book ai didi

javascript - 带 div 和 d3 缩放的 d3 力图

转载 作者:行者123 更新时间:2023-12-03 04:49:15 26 4
gpt4 key购买 nike

Stackoverflow 社区您好!我在 d3force 定向图中无法使用 d3 Zoom。我可以实现它的缩放和平移,但这样做会破坏节点和链接之间的对齐,我不知道如何修复它......我创建了一个 fiddle 来显示我的意思。 https://jsfiddle.net/5jgrf5h8/5/

这是我执行缩放的代码:

svg.call(d3.zoom()
//.scaleExtent([1 / 2, 4])
.on("zoom", zoomed))
.on("dblclick.zoom", null);
//.on("wheel.zoom", null);

function zoomed() {
//link.attr("transform", d3.event.transform);
link.attr("transform", "translate(" + d3.event.transform.x + "," + d3.event.transform.y + ") scale(" + d3.event.transform.k + ")");
node.style("transform", "translate(" + d3.event.transform.x + "px," + d3.event.transform.y + "px) scale(" + d3.event.transform.k + ")");

simulation.alphaTarget(0.001).restart();
simulation.alphaTarget(0);
}

最佳答案

当您在 div 节点上应用 CSS scale 时,它的原点为 0,0 而不是位置的原点他们目前在。

试试这个:

function zoomed() {

// apply CSS scale with respect to current position
node.each(function(d){
var self = d3.select(this),
x = self.style("left"),
y = self.style("top");
self.style("transform-origin", "-" + x + " -" + y);
})

link.attr("transform", "translate(" + d3.event.transform.x + "," + d3.event.transform.y + ") scale(" + d3.event.transform.k + ")");
node.style("transform", "translate(" + d3.event.transform.x + "px," + d3.event.transform.y + "px) scale(" + d3.event.transform.k + ")");

simulation.alphaTarget(0.001).restart();
simulation.alphaTarget(0);
}
<小时/>

已更新fiddle here

关于javascript - 带 div 和 d3 缩放的 d3 力图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42733581/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com