在this JSFiddle我在svg中实现了元素。我希望这组元素可以拖动,我已经使用d3.drag
并使用transform:translate
进行了尝试。阻力不平滑。它在这里和那里闪烁和跳跃。
背后的原因是什么,如何克服?
拖动功能如下:
var dragcontainer = d3.drag()
.on("start", function() {})
.on("drag", function(d, i) {
var x = d3.event.x;
var y = d3.event.y;
d3.select(this.parentNode.parentNode).attr("transform", "translate(" + x + "," + y + ")");
})
.on("end", function() {});
答案 0 :(得分:5)
而不是将拖动侦听器附加到外部对象div:
d3.select("#input-container-div").call(dragcontainer);
将它添加到svg组,如下所示:
d3.select(d3.select("#input-container-div").node().parentNode.parentNode).call(dragcontainer);
其次,而不是使用d3.event.x / d3.event.y
var x = d3.event.x;
var y = d3.event.y;
使用dx和dy获取鼠标移动差异并将其存储以备将来拖动。
像这样:
this.x = this.x || 0;//reset if not there
this.y = this.y || 0;
this.x += d3.event.dx;
this.y += d3.event.dy;
d3.select(this).attr("transform", "translate(" + this.x + "," + this.y + ")");
工作代码here