D3.js 力導向圖的拖拽(drag)與縮放(zoom)

不知道大家會不會跟我一樣遇到這樣的問題,在之前做的力導向圖的基礎(chǔ)上加上縮放功能的時候,拖動節(jié)點時整體會平移不再是之前酷炫的效果(失去了拉扯的感覺?。?。天啊,簡直不能接受如此丑X的效果。經(jīng)過不懈的努力終于解決了這個問題。
以下是事情發(fā)生的原因及解決的代碼:

var zoom = d3.behavior.zoom()  
            .scaleExtent([1, 10])  //縮放范圍
            .on("zoom", zoomed);  
  
function zoomed() {  
    container.attr("transform",    //此處的container是之前svg下 append('g')后返回的對象
        "translate(" + d3.event.translate + ")scale(" + d3.event.scale + ")");  
}  
var container = svg.append("g")   //相當于縮放的容器
                   .call(zoom); 

加入以上的代碼后,縮放的功能是實現(xiàn)了。但是,拖動節(jié)點的時候 不再有力拉動的感覺 而是整個圖的平移。(如下圖)


拖動示例


我們理想中的拖動效果不應該和縮放效果沖突,所以又去重新看了官網(wǎng)的例子
猜測可能是


這邊定義的是縮放加整個的平移 所以拖動的時候 是整個力導向圖的平移。

根據(jù)官網(wǎng)的例子調(diào)整了下代碼:
定義drag時調(diào)用的方法:


code

對應的方法:

code

調(diào)用拖拽函數(shù):

code

更新后調(diào)用的示例:

更新后示例

2017.2.23

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容