Существует простой способ сделать это без пересчета точек.Вам просто нужно перевести форму, используя свойство transform.Допустим, у вас есть какая-либо фигура в вашем SVG (в случае, если я хочу показать вам, я собираюсь использовать элемент shape), и что вы можете перемещать эту фигуру только тогда, когда событие mousedown, затем вызывается mousemoveи что это действие заканчивается, когда кнопка мыши отпущена.Затем процедура выглядит следующим образом с использованием тегов jQuery и svg в качестве селекторов:
$("svg").mousedown(function(e){
/* Getting initial coordinates of pointer */
var GetInitCoordx = e.clientX;
var GetInitCoordy = e.clientY;
/* When mouse is moved while down, then applies the transformation. */
$(this).bind("mousemove.customName", function(e){
$("svg").find("path").attr("transform", "translate("+String(e.clientX-GetInitCoordx)+","+String(e.clientY-GetInitCoordy)+")");
});
/* When mouse button is released, move event is unbind */
$(this).mouseup(function(e){
$(this).unbind("mousemove.customName");
);}
});
Основная идея заключается в следующем.Я уже разработал приложение с использованием такого подхода, и оно отлично работало для меня в Chrome, IE9 и Opera.В любом случае, вы можете согреть меня, если я допустил ошибку в коде, но я хотел, чтобы вы получили то, что использованный мной подход очень прост в реализации.
Кроме того, помните, что выможно установить уникальные значения свойств для ваших элементов svg, чтобы вы могли идентифицировать их при выборе с помощью селекторов jQuery.