繁体   English   中英

d3强制布局在拖动时捕捉到网格

[英]d3 force layout snap to grid on drag

在d3中完成拖动后如何捕捉网格?

我尝试将一个事件监听器添加到dragend事件并舍入值,但它似乎不起作用:

force.drag()
    .on('dragend', function(d) {
        d.fixed = false;
        d.x = Math.round(d.x / 10) * 10;
        d.y = Math.round(d.y / 10) * 10;
    });

http://jsfiddle.net/zc89zj9e/

你的jsfiddle有2个问题。 首先,节点成为undraggable一旦被拖到-这是因为你设置d.fixed = truedragend 这可以防止进一步的位置变化。 解决方案是在dragstart上设置d.fixed = false

其次,除了dxdy ,还需要设置d.pxd.py (强制布局在内部使用)以使位置更改生效。

function dragstarted(d) {
  // ...
  d.fixed = false;
}

function dragended(d) {
  d.fixed = true;
  d.x = d.px = Math.round(d.x / 100) * 100;
  d.y = d.py = Math.round(d.y / 100) * 100;
}

在这里完成演示。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM