D3.js:从选择中删除force.drag

时间:2012-10-30 09:48:09

标签: javascript d3.js drag force-layout

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

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

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

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

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

3 个答案:

答案 0 :(得分:21)

你很亲密。拖动事件由mousedown事件启动,其名称空间名为drag。请参阅:https://github.com/mbostock/d3/blob/master/src/behavior/drag.js#L5

所以,要删除它,你可以这样做:

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

答案 1 :(得分:3)

这个问题并不是要问如何对拖拽元素进行细粒度控制,但是我来到这里寻找如何根据条件切换拖动开/关,并且提问者还询问了如何在拖拽之后取消阻力在评论中删除它。

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

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

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

答案 2 :(得分:1)

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

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