Javascript d3.js v4拖动缩放的元素跳跃鼠标

Javascript d3.js v4拖动缩放的元素跳跃鼠标,javascript,d3.js,Javascript,D3.js,嗨,我的社区 我有以下问题: 我创建了一个以div为节点的d3力定向图,并包含了d3缩放行为。 当我放大或放大很多时,节点的拖动要么太快(放大时)要么太慢(缩小时)。 我通过应用d3.mouse(d3.select(“.links”).node())修复了这个问题,以便从缩放区域内获取鼠标坐标 但由于我这样做了,我注意到当拖动一个节点时,这个节点会跳跃。它以鼠标指针为中心,而不是跟随鼠标 经过一些研究,我试图通过指定一个主题来解决这个问题,如下所示: d3.drag().subject(func

嗨,我的社区

我有以下问题: 我创建了一个以div为节点的d3力定向图,并包含了d3缩放行为。 当我放大或放大很多时,节点的拖动要么太快(放大时)要么太慢(缩小时)。 我通过应用d3.mouse(d3.select(“.links”).node())修复了这个问题,以便从缩放区域内获取鼠标坐标

但由于我这样做了,我注意到当拖动一个节点时,这个节点会跳跃。它以鼠标指针为中心,而不是跟随鼠标

经过一些研究,我试图通过指定一个主题来解决这个问题,如下所示:

d3.drag().subject(function() { 
        var t = d3.select(this);
        return {x: parseInt(t.style("left"),10), y: parseInt(t.style("top"),10)};
    })
但是它没有任何影响,我现在也没有主意了。如果有人能在这里帮助我,我很高兴


使用以下小提琴演示问题:

它会跳到节点的中心,因为在拖动过程中,您正在执行以下操作:

function dragged(d) {
  var coordinates = [0, 0];
  coordinates = d3.mouse(d3.select(".links").node()); //this will give the link end location..so it will jump to the centre of the node
  var x = coordinates[0];
  var y = coordinates[1];

  d.fx = x;
  d.fy = y;


  d.fixed = true;
}
应该是:

function dragged(d) {

  d.fx += d3.event.dx;//give delta increment to current position
  d.fy += d3.event.dy//give delta increment to current position

  d.fixed = true;
}

工作代码

Hi Cyril,是的,这没有跳跃鼠标的问题,但它确实返回了缓慢跟随拖动的问题。当你缩小图形,然后拖动一个节点时,你会看到我的意思检查这个…我保留了一个全局变量来存储比例,并使用它来计算拖动