我有一个(很简单)的问题:如何“非呼叫”由D3.js做出的选择,force.drag? 比方说,我创建了一组元素,并呼吁“呼叫”就可以了,给它一个力导向布局的阻力回调。 这是这样的:
d3.selectAll('rect').call(force.drag);
现在应该有可能稍后从一些节点的删除行为。 我的方法包括重置各种监听器,如“点击”,“拖”等使用
d3.select('rect#no-drag').on('click', null);
他们没有工作。 有谁知道如何删除回调?
你靠近。 拖动事件是由发起mousedown
与命名空间称为事件drag
。 请参阅: https://github.com/mbostock/d3/blob/master/src/behavior/drag.js#L5
因此,要消除这种你可以这样做:
d3.select('rect#no-drag').on('mousedown.drag', null);
这个问题是不问如何有联动元件上细粒度的控制,但我来到这里寻找如何开启/基于条件关的阻力,而提问者也问如何将其去除后得到回拖注释。
因此,为寻找如何有条件地允许拖动事件,使用drag.filter 。
drag.filter
需要需要返回一个布尔值的回调。 如果回调返回true,拖动发生,否则拖不触发。
这是不是删除从选择的阻力,然后尝试重新申请就干净多了。
这条线不知何故,不适合移动设备兼容(铬/机器人)
d3.select('rect#no-drag').on('mousedown.drag', null);