簡體   English   中英

D3.js:從選擇中刪除force.drag

[英]D3.js: Remove force.drag from a selection

我有一個(相當簡單的)問題:如何在D3.js的選擇中“取消調用”force.drag? 假設我創建了一組元素並在其上調用“call”,給它一個強制定向布局的拖拽回調。 看起來像這樣:

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

現在,以后可以從某些節點中刪除該行為。 我的方法包括重置各種聽眾,例如“點擊”,“拖動”等

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

他們都沒有工作。 有人知道如何刪除回調嗎?

你很親密 拖動事件由具有名為drag的命名空間的mousedown事件啟動。 請參閱: 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,則發生拖動,否則不會觸發拖動。

這比從選擇中刪除拖動然后嘗試重新應用它要清晰得多。

這條線不知何故它不兼容移動(chrome / android)

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM