Я пытаюсь использовать событие d3.js d3.behavior.drag()
drag
для обновления моей модели данных (без установки позиции элемента сразу), затем запустите мою функцию "рисования", чтобы обновить все элементы на основе обновленной модели. Кроме того, я использую перевод transform
в содержащем элементе группы, чтобы переместить все элементы, связанные с перетаскиваемым объектом (я удалил дополнительные элементы из приведенного ниже примера). Это заставляет затянутые элементы заикаться, когда они перетаскиваются, что ухудшается, тем быстрее вы его перетаскиваете.
Смотрите этот урезанный пример в jsFiddle.
Здесь код примера:
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();