Javascript 如何更改气泡图中一个元素的位置
我试图在D3.js中实现一个交互:选择一个气泡会使它移动到另一个气泡 d3层次结构具有布局,其中。我可以更新数据以增加选择中圆的大小。但是,我看不到任何方法来设置一个圆在布局中的位置,并让其他圆围绕它进行排列。我需要像“给定(x,y)处的圆,围绕它创建一个气泡图”这样的东西,而这在d3.pack中是不存在的 d3力也可用于制造。如果我添加一些类似于使用d3.drag的交互,我可以使一个圆朝中心移动,如下所示:Javascript 如何更改气泡图中一个元素的位置,javascript,svg,d3.js,Javascript,Svg,D3.js,我试图在D3.js中实现一个交互:选择一个气泡会使它移动到另一个气泡 d3层次结构具有布局,其中。我可以更新数据以增加选择中圆的大小。但是,我看不到任何方法来设置一个圆在布局中的位置,并让其他圆围绕它进行排列。我需要像“给定(x,y)处的圆,围绕它创建一个气泡图”这样的东西,而这在d3.pack中是不存在的 d3力也可用于制造。如果我添加一些类似于使用d3.drag的交互,我可以使一个圆朝中心移动,如下所示: function dragstarted(event) { const int
function dragstarted(event) {
const interX = d3.interpolate(event.x, dimensions.width / 2);
const interY = d3.interpolate(event.y, dimensions.height / 2);
if (!event.active) simulation.alphaTarget(0.3).restart();
(function toCenter(i) {
setTimeout(function() {
event.subject.fx = interX(i / 100);
event.subject.fy = interY(i / 100);
i++;
if (i < 100) {
toCenter(i);
} else {
event.subject.fx = null;
event.subject.fy = null;
}
}, 1)
})(1);
}
功能拖动启动(事件){
常数interX=d3.插值(事件x,维度宽度/2);
常数y=d3.插值(事件y,尺寸高度/2);
如果(!event.active)simulation.alphaTarget(0.3).restart();
(功能输入(i){
setTimeout(函数(){
event.subject.fx=interX(i/100);
event.subject.fy=interY(i/100);
i++;
如果(i<100){
toCenter(i);
}否则{
event.subject.fx=null;
event.subject.fy=null;
}
}, 1)
})(1);
}
这是唯一有效的方法——它将圆移动到中心,但它会使力通过几个刻度,因此圆可能不会真正到达图表的中心。此外,与更新数据不同,我不知道当用户想要取消扩展的圆时,如何将圆重置为其原始位置
我的问题是,如何让气泡图中的一个圆移动到中心,并让其他圆重新排列它们自己?我是否可以对d3.pack或d3.force进行一些更改,或者我应该尝试不同的方法?还要一个图书馆吗