我正在尝试使用 d3.js 的d3.behavior.drag()
drag
事件来更新我的数据模型(不立即设置元素位置),然后运行我的“绘制”函数以根据更新的模型更新所有元素。此外,我transform
在包含的 group 元素上使用了 translate 以移动与拖动对象关联的所有元素(我从下面链接的示例中删除了额外的元素)。这会导致被拖动的元素在被拖动时会卡住,拖得越快,情况就会越糟糕。
这是示例的代码:
blocks = [
{ x: 0, y: 0 }
];
drag = d3.behavior.drag()
.origin(Object)
.on("drag", function(d) {
d.x = d3.event.x;
d.y = d3.event.y;
draw();
});
svg = d3.select("body")
.append("svg:svg")
.attr("width", 600)
.attr("height", 600);
function draw() {
g = svg.selectAll("g")
.data(blocks);
gEnter = g.enter().append("g");
g.attr("transform", function(d) { return "translate("+d.x+","+d.y+")"; });
gEnter.append("rect")
.attr("height", 100)
.attr("width", 100)
.call(drag);
}
draw();