我正在使用SVG中的布局构建器,并希望为其添加拖放和可调整大小的功能。我的网页包含一个主画布(SVG)和一些嵌套的SVG。我希望我的嵌套SVG(你可以说是子SVG)是可拖动的。我怎样才能做到这一点?我在JQuery中搜索过我们有可拖动和可调整大小的API,但它不适用于SVG。我怎样才能在d3.js中实现它?任何帮助都是首选。提前谢谢。
答案 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) {
}
要考虑鼠标指针偏移,并将拖放操作转换为重新缩放操作,您必须相应地填写拖动处理程序功能。