我正在开始一个新项目,主要目的是学习一些基本的main.html
。这是我的玩具问题:我想绘制一个带有几个矩形的交互式流程图,当用户悬停/点击一个矩形时,我想用箭头指向场景中的其他矩形来显示依赖关系。我还希望在其他地方显示一些文本,条件是此用户操作。
最终目标是这样的:
这是我的出发点,受到一些基本教程的启发:
的index.html
<script>
的script.js
d3.js
有人可以说明(/指向我)处理悬停或点击的一般程序,并基于此生成内容(箭头,文字)吗?
PS:我很满意R以更合适的格式预处理数据。我已经使用yaml作为输入格式,并且根据需要似乎很容易从中生成json。 d3映射和交互性是我总是新手的地方。
答案 0 :(得分:1)
首先:在<svg>
上,你有<text>
而不是<p>
,令人沮丧的是,它不会自行封闭。要包装文本,请查看Mike Bostock's Block。
一般的点击功能采用以下形式:
selection.on('click', function (data, index) {
stuff();
})
悬停使用mouseover
和mouseout
代替click
。对于主题,似乎click
是显示箭头的明智选择,mouseover
是'其他文本'。在您的情况下,它可能看起来像这样:
rectangles.on('click', function (d, i) { //1
d3.select('svg').append('path').attr('d', pathString); //2
d3.selectAll('rect').filter(function (k, j) {
return k.name == d.depends; //3
}).each(function () {
d3.select(this).on('click')(); //4
});
}).on('mouseover', function (d, i) { //5
d3.select('text#moreinfo').text(d.extraInfo);
});
箭头必须是path
个元素,除非您为每个元素添加polygon
个元素,否则它们不会有头部。