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

标签 css html5-canvas fabricjs

我正在使用 fabric.js 创建 Canvas 元素。我使用框架创建了一条线。但是,有没有办法在线路上设置一个固定的长度。原因是,这条线是可拖动的并且可以延伸。

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

最佳答案

评论中的内容变得相当复杂,所以让我们总结一下:

下面是简单案例的解决方案:

在你的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 相同的量。

通过这种方法,当您尝试移动膝盖时,您的骨盆-膝盖线将随鼠标一起移动,但会保持其长度(如您所愿)。但在膝盖运动期间,腿的其余部分会移动相同的量,因此实际上您也将保持膝踝线的长度。

关于css - 使用 fabric.js 和 canvas 在 Line 上设置固定高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24361224/

相关文章:

html - 使用 css pre-wrap vs br?

php - 如何使用我通过在 HTML 5 Canvas 上绘制创建的 src 保存图像文件

image - FabricJS图像对象clipTo形状对象问题

javascript - html5 问题中 Canvas 上的事件监听器

reactjs - Canvas 库如何适应 Flux 模式和 React?

fabricjs - 如何在选择中获取单个对象的宽度、高度、左侧和顶部 :created event?

css - 如何制作半透明背景?

javascript - 如何在单击取消按钮时停止/暂停嵌入?

javascript - Helvetica 在 Windows 操作系统上呈现为 Arial

javascript - HTML-Canvas - JavaScript-动画/绘图