2017-02-20 5 views
0

私は2列のブートストラップを使ってレスポンシブなレイアウトを作っていました。私の左のカラムはd3フォースレイアウトチャートを持っています。Javascriptでd3 svgチャートの現在のサイズプロパティにアクセスするにはどうすればよいですか?

以前私は、固定サイズを使用し、それがノードチャート(Iスタックにここに見出さ溶液)に賢明な配置を持っていることを確認するために他の関数によって使用される定数を算出したと:

var w = 400, 
    h = 400, 
    r = 6, 
    k = Math.sqrt(nodes.length/(w * h)), 
    fill = d3.scale.category20(); 

var force = d3.layout.force() 
    .gravity(100 * k).charge(-10/k) 
    .linkDistance(30) 
    .nodes(nodes).links(links) 
    .start(); 

私は応答のレイアウトがある、私はwhを使用することはできません。むしろ、私は定数を計算することができるように、現在のwidthheightを見るために何らかのゲッターが必要です。

私は、Javascriptのコードに新たなんだので、これは、私は、コンソールを探ることを思い付いたのが最善です:

d3.select("#chart").property('height')['animVal']['value'] 
d3.select("#chart").property('width')['animVal']['value'] 

は、私がこれをやるべきか、このですか?より直接的な機能はありますか?これは私にとっては醜いようです。

+1

getBBox()またはgetBoundingClientRect()で簡単に手に入るものではありませんか? – elias

答えて

1

これは残りのコードによって異なりますが、通常はgetBoundingClientRect()となります。この関数は、選択された要素の位置、幅、高さを含む読み取り専用オブジェクトを返します。あなたの場合は、次のように使用できます:

d3.select("#chart").getBoundingClientRect().height 
d3.select("#chart").getBoundingClientRect().width 
+0

すごくクリーンです。これは一般的なJavascriptのものかd3の一部ですか?私は通常、ウェブのものをしないので、私は自分の要素から完全に外れています。 – spanishgum

+1

幸いにも、 'getBoundingClientRect()'は 'element'で呼び出すことができる一般的なJavaScript関数です。この例では、d3を使用して要素を選択しましたが、要素にアクセスするためにネイティブコードを使用することもできます。これは次のようになります: 'document.getElementById( 'chart')。getBoundingClientRect()' – jobB

+0

これは非常に役に立ちます。ありがとうございました! – spanishgum

関連する問題