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 に答える