2013-01-18 28 views

回答

6

當佈局收斂,force.alpha()將被設置爲0。設置一個計時器輪詢爲(不要過於頻繁! ),你會知道你什麼時候完成。

此示例應每隔interval毫秒重試,直到佈局停止。變量timer保留當前計時器,如果您不想等待佈局完成,可以重置該計時器。

var timer = null; 
function onCompletion(force, callback, interval) { 
    interval = interval || 300; 

    function retryIfRunning() { 
     if (force.alpha() != 0) 
      timer = setTimeout(checkAndRetry, interval); 
     else { 
      timer = null; 
      callback(); 
     } 
    } 

    retryIfRunning(); 
} 
2

這是不可能的,因爲內置的功能,因爲它取決於你考慮爲與放置節點完成。完成的方式是調用tick函數n次,其中n取決於您擁有的圖表大小和所需的精度。

#force.tick():運行力佈局模擬一步。

我鼓勵你,如果你想知道更多閱讀force.tick()文檔:https://github.com/mbostock/d3/wiki/Force-Layout#wiki-tick

13

the documentation,當佈局完成時分派的end事件,即當force.alpha === 0

所以,你可以找出當它與完成:

force 
    .nodes(yourNodes) 
    .links(yourLinks) 
    .on('tick', function() { 
    // layout is in progress 
    }) 
    .on('end', function() { 
    // layout is done 
    callback(); 
    }); 
+1

這是方式更短,然後接受的解決方案! @TO也許切換接受? – kwoxer

相關問題