我对此感到疑惑并想做类似的事情。这就是我发现的。首先,我想知道鼠标坐标是什么。为了能够读取坐标,我在 drag_points.py 中插入了以下“alert”语句,类似于“print”:
var startx = 0;
var starty = 0;
function dragstarted(d) {
d3.event.sourceEvent.stopPropagation();
d3.select(this).classed("dragging", true);
startx = obj.ax.x(d[0]);
starty = obj.ax.y(d[1]);
}
var endx = 0;
var endy = 0;
function dragended(d) {
d3.select(this).classed("dragging", false);
endx = obj.ax.x(d[0]);
endy = obj.ax.y(d[1]);
alert(endx-startx);
d3.select("input")
.attr("value",endx-startx)
}
单击并释放鼠标后,它会打开一个带有 x 距离的警报诊断。这允许访问坐标信息。
接下来,我测试了我是否可以将这个坐标信息动态编码到底层 html 中,从而允许进一步的后端处理。我了解到 d3.js 允许您修改 html 标签的内容。因此,我修改了_display.py中的“jinja模板”(与“plugins.py”位于同一目录中。具体来说,我在模板中输入了以下内容:
<table width=300 height=200 border=5>
<tr>
<form method="POST" action="/plot" class="">
<input type="submit" name="submit" value="PLOT">
</form>
</tr>
</table>
并修改了“drag_points.py”,以便将“input”值的值从“post”修改为endx-startx,而不是打开警告框。也就是说,
d3.select("input")
.attr("value",endx-startx)
最终的结果是,当一个球被拖动和释放时,警告框会显示 x 位移,这个值用于更新“输入”按钮的值。如果使用输入按钮以外的其他标签来设置值,应该可以利用下游的信息。