有没有办法在svg d3.js中添加拖放功能?

时间:2017-05-24 19:46:17

标签: jquery d3.js svg

我正在使用SVG中的布局构建器,并希望为其添加拖放和可调整大小的功能。我的网页包含一个主画布(SVG)和一些嵌套的SVG。我希望我的嵌套SVG(你可以说是子SVG)是可拖动的。我怎样才能做到这一点?我在JQuery中搜索过我们有可拖动和可调整大小的API,但它不适用于SVG。我怎样才能在d3.js中实现它?任何帮助都是首选。提前谢谢。

1 个答案:

答案 0 :(得分:0)

Mike Bostock's Circle Dragging example应该让你入门。与jQuery相比,最低限度是:

svg.selectAll("svg").call(d3.drag().on("drag", dragged));

function dragged(d) {
  d3.select(this)
    .attr("x", d3.event.x)
    .attr("y", d3.event.y);
}

但最好先将SVG元素连接到数据对象,然后直接修改数据而不是元素:

svg.selectAll("svg").data(elements)
  .enter().append("svg")
    .attr("x", function(d) { return d.x; })
    .attr("y", function(d) { return d.y; })
    .attr("width", function(d) { return d.width; })
    .attr("height", function(d) { return d.height; })
    .call(d3.drag()
        .on("start", dragstarted)
        .on("drag", dragged)
        .on("end", dragended);

function dragstarted(d) {
  d3.select(this).raise();
}

function dragged(d) {
  d3.select(this)
    .attr("x", d.x = d3.event.x)
    .attr("y", d.y = d3.event.y);
}

function dragended(d) {
}

要考虑鼠标指针偏移,并将拖放操作转换为重新缩放操作,您必须相应地填写拖动处理程序功能。