12

私は大学生協で、現在チームの Web ページ プロジェクトを開発しています。最初に、dagre-d3 ライブラリを使用してグラフを作成することにしましたが、Chrome で問題なく動作しました。次に、SVG の ForeignObject 要素が IE で機能しないことに気付きました (IE はたまたまサポートする主要なブラウザーです)。

私の目標は本質的に各グラフ コンポーネントに HTML コンテンツを入力することなので、まだ dagre-d3 を使用している IE でこれを実装するための回避策があるかどうか疑問に思っていました。または、別のグラフ ライブラリの推奨事項はありますか?

アップデート:

基本的に、下のスクリーンショットに示すグラフを作成したかったのです。 サンプルのスクリーンショット

以下は、dagre-d3 を使用してグラフを作成するために現在使用しているコードです。

HTML スニペット:

<div id="graph-section">
    <svg>
        <g transform="translate(20,20)" />
    </svg>
</div>

JS スニペット:

var g = new dagreD3.Digraph();

// Construct nodes
for (var i = 0; i < data.nodes.length; i++) {
    var label = "<div class='graphLabel'>";
    label += "<div class='comp" + data.nodes[i].value.type + " left'>&nbsp;</div>";
    label += "<b>&nbsp;" + data.nodes[i].value.name + "</b><br/>";
    label += "<span class='info'>Start: " + data.nodes[i].value.start + "</span><br/>";
    label += "<span class='info'>End: " + data.nodes[i].value.end + "</span><br/>";
    label += "<span class='info'>Launched by " + data.nodes[i].value.user + "</span>";
    label += "</div>";
    g.addNode(data.nodes[i].id, { label: label });
}

// Construct edges
for (var j = 0; j < data.links.length; j++) {
    g.addEdge(null, data.links[j].start, data.links[j].end);
}

var layout = renderer.run(g, d3.select("#graph-section svg g"));
4

2 に答える 2

6

私は修士論文のプロジェクトで SVG をforeignObject多用しましたが、Chrome と Firefox で問題なく動作したので問題ありませんでした。しかし、問題に対する私の解決策/回避策 (つまり、IE がサポートしていないforeignObject) は、階層化されたレイアウトを使用することでした。SVG を必要とするオブジェクトを SVG レイヤーに配置し、HTML で作成できるオブジェクトを HTML レイヤーに配置しました (ほとんどの場合、HTML の「本拠地」であるテキストを含む要素)。

svg は z-index をサポートしていない (代わりに要素の順序を使用する) ため、互いの上に多くの要素が必要な場合は、少し複雑になる可能性があります。そのため、それを解決するには、複数の HTML/SVG レイヤーを作成する必要がある場合があります。レイヤーを正確に重ねるだけで、位置の調整が簡単になります。SVG オブジェクトは座標に基づいて配置されるため、HTML 要素を同じ方法で配置するだけで済みます (例: translate(...)) 。

dagre-d3を使用したことがないため、この回答がかなりずれている場合はお詫び申し上げます。

于 2014-02-08T15:17:17.587 に答える
2

2015 年 4 月 29 日の時点でsvg-labels(を使用しないforeignObject) の機能が追加されました。

の代わりにこれを試してくださいhtml-labels

デモを見る: http://cpettitt.github.io/project/dagre-d3/latest/demo/svg-labels.html

コミットを参照してください: https://github.com/cpettitt/dagre-d3/pull/158

于 2017-01-04T10:12:29.797 に答える