使用fabric.js和canvas在Line上设置固定高度

时间:2014-06-23 08:14:26

标签: css html5-canvas fabricjs

我正在使用fabric.js来创建一个canvas项目。我使用框架创建了一行。但是,有没有办法在线设置固定长度。线条的原因是可拖动并延伸。

line = makeLine([250,125,250,175]),

1 个答案:

答案 0 :(得分:0)

评论中的内容相当复杂,所以让我们总结一些事情:

以下是针对简单案例的解决方案:

在你的http://jsfiddle.net/sprakashg/rbhhP/中,你的行数很少:

var p = e.target;
p.line1 && p.line1.set({ 'x2': p.left, 'y2': p.top });

此处,line1是您的行,p是您的圈子。

您可以计算线的初始长度并存储它。接下来,您可以计算当前行方向,即line.p1position of p。现在,如果您将此方向标准化并乘以初始线长度,您将获得新方向,指向您的圆,但保持初始线长。将其添加到行开头,您可以将此值存储在p.line1.set()中。

如果您有两个圆圈与一条线相连,这将有效,但如果您将几条线连接到单个圆圈,那么您将无法移动它。

更复杂案例的解决方案:

Stickman的情况下,您无法移动膝盖,因为只有另一个点可以满足您的线长限制。在这种情况下,我会在模型中添加一个简单的层次结构。

如果假设某些Circle是模型的根,则所有其他对象都是某些模型树的叶子和分支。现在,当您移动某个圆圈时,您应该仅为该行进行上述计算,并将其与parent连接。

然后,您可以在模型层次结构中取下面的所有圆圈,并将它们移动到您移动主Circle的相同金额。

采用这种方法,当你试图移动膝盖时,你的骨盆膝关节线会随着你的鼠标移动但保持其长度(如你所愿)。但是在膝盖移动过程中,腿部的其余部分会移动相同的量,所以实际上你也会保持膝盖 - 脚踝线的长度。