【问题标题】:A line always connecting two draggable elements in canvas using KineticJS使用 KineticJS 始终连接画布中两个可拖动元素的线
【发布时间】:2013-04-28 11:05:11
【问题描述】:

我正在尝试使用 Kinetic JS 在 HTML5 Canvas 中创建用例创建器。到目前为止,我可以通过右键单击要连接的两个元素(演员和用例)来制作一条线。

但是这条线仍然固定在拖动它所连接的元素之一。 我想要一条始终连接两个元素的线,即使其中一个元素被拖动。

换句话说,我希望线条所连接的元素充当线条的锚点。

我尝试理解this,但未能实现。

【问题讨论】:

  • jsfiddle.net/zg24b 说明:1.插入演员。 2.插入一个用例。 3.右键点击演员,然后右键点击用例进行关联。

标签: canvas anchor line kineticjs use-case


【解决方案1】:

当actor或useCase被拖动时,您可以通过重新定位连接线来保持actor+useCase的连接。

假设您有 3 个动力学节点或组:

  1. 演员节点,
  2. 一个用例节点,
  3. 专用于连接它们的动力线。

为actor和useCase设置dragmove事件处理程序。

// when the actor is dragged, reposition the connecting line

actor.on('dragmove', function () {
    connectThem(actor,useCase,connectingLine);
});

// when the useCase is dragged, reposition the connecting line

useCase.on('dragmove', function () {
    connectThem(actor,useCase,connectingLine);
});

在 dragmove 处理程序中,获取 actor 和 useCase 的位置并重新定位连接线。

// reposition the line to connect the actor & useCase

function connectThem(actor,useCase,connectingLine){

    // get the XY of the actor+useCase to connect
    var x1 = actor.getX();
    var y1 = actor.getY();
    var x2 = useCase.getX();
    var y2 = useCase.getY();

    // reposition the connecting line
    connectingLine.setPoints([x1,y1,x2,y2]);

    // send the connecting line to the back
    connectingLine.setZIndex(0);

    // redraw the layer
    layer.draw();
};

【讨论】:

  • 现在唯一的问题是我如何记录连接到特定用例的所有行,以便它们在拖动连接的用例时显示相同的行为。帮助!
猜你喜欢
  • 2014-11-18
  • 2012-12-26
  • 1970-01-01
  • 1970-01-01
  • 2016-02-17
  • 1970-01-01
  • 2013-08-09
  • 1970-01-01
  • 2014-07-14
相关资源
最近更新 更多