D3.js:从选择删除force.dragD3.js:从选择删除force.drag(D3.js:

2019-05-12 04:40发布

我有一个(很简单)的问题:如何“非呼叫”由D3.js做出的选择,force.drag? 比方说,我创建了一组元素,并呼吁“呼叫”就可以了,给它一个力导向布局的阻力回调。 这是这样的:

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

现在应该有可能稍后从一些节点的删除行为。 我的方法包括重置各种监听器,如“点击”,“拖”等使用

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

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

Answer 1:

你靠近。 拖动事件是由发起mousedown与命名空间称为事件drag 。 请参阅: https://github.com/mbostock/d3/blob/master/src/behavior/drag.js#L5

因此,要消除这种你可以这样做:

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


Answer 2:

这个问题是不问如何有联动元件上细粒度的控制,但我来到这里寻找如何开启/基于条件关的阻力,而提问者也问如何将其去除后得到回拖注释。

因此,为寻找如何有条件地允许拖动事件,使用drag.filter 。

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

这是不是删除从选择的阻力,然后尝试重新申请就干净多了。



Answer 3:

这条线不知何故,不适合移动设备兼容(铬/机器人)

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


文章来源: D3.js: Remove force.drag from a selection