2016-03-22 8 views
0

私はこのドーナツチャートをちょっと試してみましたが、ちょうどをアスペクト比/ビューボックス方式でレンダリングしません。レスポンシブルドーナツチャートd3

これはウィンドウのサイズ変更機能で動作しますが、バグがあります。コンテナを折りたたむことができ、間違ってサイズを変更できます。私はこれを回避することができますが、これをコメントアウトしたコードで動作させるためのヒントはありますか?

元のウィンドウサイズに基づいて、チャートはそれに基づいたディメンションを持ちます。開始時にウィンドウのサイズが間違っているとルックを歪ませる可能性があります。

https://jsfiddle.net/7rgf09x1/9/

// WORK IN PROGRESS: Responsive using only d3. 
    //  var svg = d3.select('#revenue-chart').append('svg') 
     // .attr('id', 'revenue-chart-render') 
    //  .attr("width", '100%') 
    // .attr("height", '100%') 
    // .attr('viewBox','0 0 '+Math.min(width,height)+' '+Math.min(width,height)) 
    // .attr('preserveAspectRatio','xMinYMin') 
    // .attr("transform", "translate(" + Math.min(width,height)/2 + "," + Math.min(width,height)/2 + ")"); 

答えて

1

viewBoxの目標は、グラフィックス座標からページ座標を分離することです。したがって .attr('viewBox','0 0 '+width +' '+height) は、[0、幅] x [0、高さ]のグラフィックス座標を与えます。これは、ページ内のsvgのサイズに依存しません。 '0 0'を変更すると、グラフィックス座標の原点を左上隅の代わりに中央に配置することができます(ただし、翻訳されたgのソリューションも有効です)。最後に、preserveAspectRatioは、必要に応じて側面にパディングを追加して画像が伸びていないことを確認します。

ので、全体的に、これは大丈夫動作しますが、1つの問題依然として存在している、だから、あなたに

var svg = d3.select('#revenue-chart').append('svg') 
     .attr('id', 'revenue-chart-render') 
     .attr("width", '100%') 
     .attr("height", '100%') 
     .attr('viewBox',(-width/2) + ' ' + (-height/2) + ' '+width +' '+height) 
     .attr('preserveAspectRatio','xMinYMin') 
+0

を与える必要があります。まだめちゃくちゃ取得 ポリフィルラインが。大きなサイズでは、そのグラフは良好に見えます(グラフがモバイル画面サイズに折り畳まれたときのIE)。しかし、polyfill行はテキストではスケーリングがよくありません(テキストは移動しますが、polyfill行は同じままです)。 実際には、特定のサイズで開始すると正しくレンダリングされます(適切な状態を維持します)。たぶん、私はそれを使用する方法があります。 – Tulun

+0

したがって、通常、私はグラフを作成するために開始コンテナサイズを使用しています。 ビューボウ/アスペクト比属性と組み合わせると、現在のウィンドウサイズにかかわらず、いいスタートサイズ(私の場合は〜780-820幅)を選ぶだけで、見た目がよくなるように見えます。 – Tulun