У меня есть линия, идущая от одной точки к другой. Я добавляю круги на концах линии, что позволяет перемещать линию.
Однако, когда я перемещаю круг и линия обновляется, другая линия каким-то образом обновляет свои собственные точки.
Раньше (движение должно происходить только в правой части экрана):
После:
Вот скрипка: http://jsfiddle.net/Robodude/s86xc/1/
(По какой-то причине линии не отображаются надежно в chrome на js fiddle ... он отлично работает локально, но в Интернете я могу показать их только на FF)
Основные инструкции: в левой сетке щелкните кружок. Щелкните второй кружок. Между точками должна быть проведена линия. Нажмите кнопку «Копировать Q в A», и линия должна быть нарисована в правом кадре с конечными точками круга, которые можно перемещать.
Справа вот что происходит:
1) Линии рисуются в правой группе.
2) На концах линий рисуются кружки.
3) Кружкам даются ссылки на все линии, которые начинаются / заканчиваются в их центре.
4) При перетаскивании кружки обновляют линии, на которые они ссылаются.
Насколько я могу судить, кружки не имеют ссылок на линии на левой боковой панели.
Левые боковые линии имеют имя "линия", а правые боковые линии (на которые есть ссылки в кружке) имеют имя "линия2".
Вот как я даю кружкам ссылки на линии. Если круг в координатах x, y уже существует, переместите линию к его свойству connectedLines.
var circleTest = circleGroup.get("." + point.x + ", " + point.y)[0];
if (circleTest == null) {
var circle = new Kinetic.Circle({
name: (point.x) + ", " + (point.y),
x: point.x,
y: point.y,
radius: answer ? 15 : 10,
stroke: "rgba(0,0,0,1)",
strokeWidth: "3",
fill: "rgba(255, 255, 255, 1)",
connectedLines: [line],
draggable: answer ? false: true,
oldX: point.x,
oldY: point.y,
dragBoundFunc: answer ? null : function (pos) {
var x = pos.x;
var y = pos.y;
var newPos = { x: x - offset.x, y: y - offset.y };
updateAttachedLines(newPos, this);
return {
x: x,
y: y
}
}
});
circle.on("click", function () {
console.log(this.attrs.connectedLines);
});
circleGroup.add(circle);
}
else {
circleTest.attrs.connectedLines.push(line);
}
Вот как выглядит updateAttachedLines:
function updateAttachedLines(pos, circle)
{
var x = pos.x;
var y = pos.y;
var ox = circle.attrs.oldX;
var oy = circle.attrs.oldY;
var cls = circle.attrs.connectedLines;
for (var i = 0; i < cls.length; i++) {
var cl = cls[i];
console.log(cl.attrs.name);
var points = cl.getPoints();
var newPoints = [];
for (var n = 0; n < points.length; n++) {
var point = points[n];
if ((point.x == ox) && (point.y == oy)) {
point.x = x;
point.y = y;
}
newPoints.push(point);
}
cl.setPoints(newPoints);
}
circle.parent.parent.draw();
circle.attrs.oldX = x;
circle.attrs.oldY = y;
}
Так почему же движение в правой боковой линии влияет на левую боковую линию?