2015-06-14 65 views
2

我有一個VisJS圖表,我希望它在我向其中添加內容時「適合」。我有大約200個節點和2000個邊。VisJS穩定

我已經定義了這些選項,注意我已經在Stabilization選項中說過「fit:true」。

但是,如果我的穩定性迭代小於100,則圖表根本不適合。

我想保持穩定的數量非常低,這樣我的圖表即將加載 - 但我想保持它的適合。

我無法獲得合適的圖表,直到我調用fit函數多次,我假設應該有一個非常簡單的方法來做到這一點。有人可以讓我知道。

var options = { 
    nodes: { 
     shape: 'dot', 
     scaling: { 
      label: { 
       min: 20, 
       max: 40 
      },    

     } 
    }, 

    edges: { 
     smooth: { 
      enabled: true, 
      type: "dynamic", 
     // roundness: 0.5 
     },}, 

    interaction: { 

     multiselect: false, 
     navigationButtons: true, 
     selectable: true, 
     selectConnectedEdges: true, 
     tooltipDelay: 100, 
     zoomView: true 
    }, 
    physics: { 
     stabilization: { 
      enabled: true, 
      iterations: 180, // maximum number of iteration to stabilize 
      updateInterval: 10, 
      onlyDynamicEdges: false, 
      fit: true 
     }, 
    } 

}; 

回答

2

我是vis的網絡模塊的開發人員,好像你發現了一個bug :)。

穩定迭代完成後,網絡應該適合。在穩定過程中是異步的,因此您應該聽取stabilizationIterationsDone事件並在那裏調用fit函數作爲快速修復。

你提到你想保持網絡適合,如果你的意思是你想保持擬合在每個渲染迭代,我想最好的方法是調用initRedraw事件中的fit函數。雖然這可能有點貴。

我們嘗試在我們的GitHub頁面上收集所有這些問題,錯誤報告和功能請求。如果您遇到其他問題或有任何問題,請在此處詢問。

http://www.github.com/almende/vis

乾杯

編輯爲您解答: 事實證明,在v4,3有不乾淨動態靜態邊緣的支持節點中的錯誤,導致適合在你的情況下做得不多。這將在下一個版本中修復。

至於導航按鈕的點擊事件,你必須自己綁定它們。基本思想:容器上的document.getElementById。然後讓孩子們重複他們。這樣你就可以得到Dom按鈕的元素。 addEventListener向它們添加一個偵聽器並使用它來觸發點擊。

+0

我實際上是手動調用fit方法,但它做的不多,所以我不得不多次調用它 - 問題是我想確保如果用戶單擊任何導航按鈕,那麼在這一點上,我不希望它繼續稱爲擬合方法。但是,如果有人點擊其中一個按鈕和發佈,那就沒有問題 - 因爲發佈「發佈」事件。但是如果有人繼續點擊一個按鈕,那麼我無法獲得任何可以取消「合適」呼叫的事件。你會知道什麼是正確的事件來捕獲任何點擊「導航交互處理程序」。 – Programmer

+0

這裏是我的代碼: this.network.on(「stabilizationIterationsDone」,function(params){ g.network.interactionHandler.navigationHandler._fit(); }); (「click」,function(params){ g.fitOnDone = false; }); (「釋放」,功能(參數))。fitOnDone = false; }); (「zoom」,function(params){ g.fitOnDone = false; }); – Programmer