私はいくつかの基本的な基本を学ぶために新しいプロジェクトを始めていますd3.js
。ここで私のおもちゃの問題です:私は、いくつかの長方形のインタラクティブなフローチャートを描きたいと思って、ユーザーが1つの上を飛ぶ/クリックすると、シーン内の他の矩形を指す矢印で依存関係を表示したいと思います。私はまた、このユーザアクションに条件付きのテキストを他の場所に表示したいと思います。矢印とテキストクリックとホバーの後に
エンドの目標は、このようなものです:
index.htmlを
<!DOCTYPE html>
<html>
<head>
<script src="https://d3js.org/d3.v4.min.js"></script>
</head>
<body>
<script src="script.js"></script>
</body>
</html>
:
ここではいくつかの基本的なチュートリアルに触発された私の出発点は、ですscript.js
var s = 50;
var w = 200;
var h = 100;
var jsonBoxes = [
{"name": "Box A", "x_axis": s, "y_axis": s, "width": w, "content": "content of Box A", "depends" : "Box C"},
{"name": "Box B", "x_axis": w + 2*s, "y_axis": s, "width": w, "content": "content of Box B", "depends" : "Box D"},
{"name": "Box C", "x_axis": 2*(w + s) + s, "y_axis": s, "width": w, "content": "content of Box C", "depends" : "Box D" },
{"name": "Box D", "x_axis": s, "y_axis": 2*s +h, "width": w, "content" : "content of Box D" , "depends": "Box F"},
{"name": "Box E", "x_axis": w + 2*s, "y_axis": 2*s+h, "width": w, "content": "content of Box E", "depends" : "Box F" },
{"name": "Box F", "x_axis": 2*(w + s) + s, "y_axis": 2*s+h, "width": w, "content": "content of Box F", "depends" : "Box A" }];
var svgContainer = d3.select("body").append("svg")
.attr("width", 800)
.attr("height", 300);
var rectangles = svgContainer.selectAll("rect")
.data(jsonBoxes)
.enter()
.append("rect");
var rectanglesAttributes = rectangles
.attr("x", function (d) { return d.x_axis; })
.attr("y", function (d) { return d.y_axis; })
.attr("width", function (d) { return d.width; })
.attr("height", 100)
.style("fill", function(d) { return "Cornsilk"; });
var p = d3.select("body").selectAll("p")
.data(jsonBoxes)
.enter()
.append("p")
.text(function(d) { return d.name + ": " + d.content; });
誰かがオンホバーまたはオンクリックに対処し、これに基づいてコンテンツ(矢印、テキスト)を生成する一般的な手順を説明できますか?
PS:データをより適切な形式で前処理するのに非常にうれしいです。私はyamlを入力形式として使用しました。必要に応じてjsonを生成するのは簡単です。 d3のマッピングとインタラクティブ機能は、私が初心者だからです。
ありがとうございました。テキストラッピングのブロックを見ましたが、それは棒グラフの一部であるため、かなり複雑な例です。私は、単にdivや、ページの下の何かを使ってもっと簡単なものを見つけたいと思っています(おそらくsvgとは別に)。矢印やベジエ曲線については、私が見た例(折りたたみ可能な木など)に基づいて、d3が私にとって見栄えの良い道を作ることができると思っていたでしょう。つまり、私のレイアウトは静的なので、単に矢印をインクスケープに描き、d3はクリック/ホバーするときに色を変えるだけです。 – baptiste
それはすばらしいアイデアのように思えますし、もしあなたがそれにしているなら、私はそれを動的にやろうとします。私は率直に言って、[trees](https://github.com/d3/d3-hierarchy/blob/master/README.md#treemap)にはあまりよく知られていません(あなたの状況にどれくらい適しているか分かりません)しかし、あなたは[this](http://bl.ocks.org/robschmuecker/7880033)のようなことをすることができますが、ノードの矩形を作成し、その上に 'text'を置きます。 –
また、 'div'アイデアの場合は' d3'を 'DOM'マニピュレータとして、' d3.select( 'body')。append( 'div')のような文でjQueryと同じように使用できます。 );それは確かにラッピングをはるかに容易にするでしょう。 –