Я начинаю новый проект с основной целью изучить базовые d3.js
. Вот моя игрушечная проблема: я хочу нарисовать интерактивную блок-схему с несколькими прямоугольниками, и когда пользователь наводит курсор мыши на один из них, я хотел бы отображать зависимости со стрелкой, указывающей на другие прямоугольники в сцене. Я также хотел бы отобразить текст в другом месте в зависимости от этого действия пользователя.
Конечная цель примерно такая:
Вот моя отправная точка, вдохновленная некоторыми базовыми уроками:
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: мне вполне удобно использовать R для предварительной обработки данных в более подходящем формате. Я использовал yaml в качестве входного формата, и мне кажется, достаточно легко создавать из него json по мере необходимости. Отображение и интерактивность d3 — это то, где я полный новичок.