Fabric.js中的Canvas坐标具有偏移量

McF*_*ane 6 javascript html5 canvas fabricjs

我刚开始使用fabric.js,我有一个(可能是初学者)错误:

我使用带有jquery的fabric,代码如下:

$(document).ready(function () {

canvas = new fabric.StaticCanvas('scroller');

canvas.add(
  new fabric.Rect({ top: 0, left: 0, width: 140, height: 100, fill: '#f55' })
);

});
Run Code Online (Sandbox Code Playgroud)

此代码应在画布上绘制140x100矩形.可悲的是,只有四分之一的矩形出现.如果我将顶部和左侧值更改为更高的数字,则画布上会出现更多的矩形.

所以看起来,画布原点不是0/0,而是...... 更高.

有人知道如何解决这个或我做错了什么?

先谢谢麦克法兰

puk*_*puk 8

这是一个带有一些例子的jsfiddle链接http://jsfiddle.net/pukster/sdQ7U/2/

我的猜测是,fabric.js计算从原点(中间点)的所有内容,因为它正在绘制矩形的四分之一,即使是使用10倍于矩形大小的画布.我的猜测是,topleft实际上是指到原点,而不是顶部和左侧假想边界框.麻烦的是,关于fabricjs的文档很少.你有没有理由使用fabricjs而不是画架

编辑这里是相同的小提琴,但用方块而不是矩形(更清楚)http://jsfiddle.net/pukster/sdQ7U/3/

编辑好我现在几乎可以肯定fabric.js使用中心作为top/ left.我把他们的例子从他们的网站上剥下来并用透明的couterpart覆盖它们,如果他们用纯帆布编码那些形状http://jsfiddle.net/pukster/uathZ/2/(蓝色边框是画布元素的限制) .

叠加纯画布图像

你看到的是盒子完全偏移了一半,但是圆圈(我只画了一个半圈,否则它就不会被辨别出来)是完全重叠的.这是HTML Canvas中的b/c,圆坐标(x,y)指的是原点而不是左上角.我没有打扰三角形b/c我的三角学有点生疏.我个人认为这是误导使用条款topleft,当xy将是更具有代表性和更短.

  • FWIW,我们计划在即将发布的1.4版本中默认切换到originX/originY左/上.大多数用户认为这更直观. (3认同)

cit*_*kid 5

是的,这是非常意外的,甚至更加无证.

解决方法:

originX: "left"
originY: "top"
Run Code Online (Sandbox Code Playgroud)

为每个创建的对象.

编辑:或在下面的评论中使用kangax更简单的解决方案.

  • 您不必为每个对象设置它.Fabric很好地利用了继承,所以你可以做`fabric.Object.prototype.originX = true; fabric.Object.prototype.originY = true;` (3认同)
  • 我讨厌挑选一个关于他自己评论的图书馆作者,但不应该是`fabric.Object.prototype.originX ="left"; fabric.Object.prototype.originY ="top";`? (2认同)