12

我有一个(相当简单的)问题:如何在 D3.js 所做的选择上“取消调用”force.drag?假设我创建了一组元素并在其上调用“调用”,给它一个强制导向布局的拖动回调。看起来像这样:

    d3.selectAll('rect').call(force.drag);

现在应该可以稍后从某些节点中删除该行为。我的方法包括使用重置各种侦听器,例如“点击”、“拖动”等

    d3.select('rect#no-drag').on('click', null);

他们都没有工作。有人知道如何删除回调吗?

4

3 回答 3

24

你很亲密。拖动事件由具有mousedown名为 的命名空间的事件启动drag。参见:https ://github.com/mbostock/d3/blob/master/src/behavior/drag.js#L5

因此,要删除它,您可以执行以下操作:

d3.select('rect#no-drag').on('mousedown.drag', null);
于 2012-10-30T13:27:27.370 回答
4

这个问题不是问如何对拖动元素进行细粒度控制,但我来这里是为了寻找如何根据条件打开/关闭拖动,并且提问者还询问如何在将拖动删除后恢复它评论。

因此,对于寻找如何有条件地允许拖动事件的任何人,请使用drag.filter

drag.filter接受需要返回布尔值的回调。如果回调返回 true,则拖动发生,否则拖动不会触发。

这比从选择中删除拖动然后尝试重新应用它要干净得多。

于 2017-06-05T15:59:25.050 回答
1

这条线不知何故不兼容移动设备(chrome/android)

d3.select('rect#no-drag').on('mousedown.drag', null);
于 2015-10-22T21:10:45.870 回答