如何获取组中对象的画布相对位置?

2024-01-02

通常一个对象相对于画布的位置可以从它的.left and .top属性,但如果对象位于选择/组中,则这些属性将与组相关。有没有办法获得它们相对于画布的位置?


当对象位于组内时,其相对于画布的坐标将取决于组的原点(以及对象的原点)。

假设我们有这段代码,其中将一个矩形和一个圆添加到一个组中。

var canvas = new fabric.Canvas(document.getElementById('c'));

var rect = new fabric.Rect({
    width: 100,
    height: 100,
    left: 50,
    top: 50,
    fill: 'rgba(255,0,0,0.5)'
});
var circle = new fabric.Circle({
    radius: 50,
    left: 175,
    top: 75,
    fill: '#aac'
});

var group = new fabric.Group([rect, circle],{
    originX: 'center',
    originY: 'center'
});
canvas.add(group);
canvas.renderAll();

以下是可能使组居中的三种情况:

  1. 组的原点设置为中心(如上面的代码所示):

    如下图所示,rect.left给出对象左侧距组中心的距离。rect.group.left给出了组中心距画布左侧的距离。

    所以矩形距画布左侧的距离=rect.left + rect.group.left (http://jsfiddle.net/uue3hcj6/3/ http://jsfiddle.net/uue3hcj6/3/)

  2. 组的原点设置为顶部/左侧(也是默认设置)

    rect.left给出对象左侧距组中心的距离。rect.group.left给我们组的左侧到画布左侧的距离。现在要计算剩余距离,我们必须添加组宽度的一半。

    所以矩形距画布左侧的距离=rect.left + rect.group.left + rect.group.width/2 (http://jsfiddle.net/uue3hcj6/6/ http://jsfiddle.net/uue3hcj6/6/)

  3. 组的原点设置为底部/右侧

    rect.left给出对象左侧距组中心的距离。rect.group.left给出组右侧与画布左侧的距离。现在要计算总距离,我们必须减去组宽度的一半。

    所以矩形距画布左侧的距离=rect.left + rect.group.left - rect.group.width/2(http://jsfiddle.net/uue3hcj6/7/ http://jsfiddle.net/uue3hcj6/7/)

注意:对象也可能出现类似情况。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何获取组中对象的画布相对位置? 的相关文章

随机推荐

  • 从 JSON 中选择随机对象[重复]

    这个问题在这里已经有答案了 我有以下代码 getJSON js questions1 json done function data window questionnaire data console log window question
  • Haskell 中遵守模态公理的有趣运算符

    我只是在看类型map a gt b gt a gt b 这个函数的形状让我想知道我们是否可以将列表形成运算符 视为遵守正常模态逻辑 例如 T S4 S5 B 常见的各种公理 因为我们似乎至少有 K 正规模态逻辑公理 其中 a gt b gt
  • git 从 github 远程存储库导出

    我想从 github 远程存储库导出 而不是克隆它 与 svn export 类似 我不想用它获取 git 文件夹 我可以通过克隆和删除 git 文件夹来解决这个问题 我想知道是否有更清洁的方法 我在某个地方读过它 你可以使用 git ar
  • 流星 $and 与 $or

    我正在尝试在 Meteor 中为我的 mongo 查询执行 and 然后 or 我有以下内容 但它似乎不起作用 希望查询匹配 OrganizationId 键在变量 user organizationId 中具有值且类型键为 convert
  • 将 R 数据表列从 JSON 转换为数据表

    我有一个包含 JSON 数据的列 如下例所示 library data table test lt data table a list 1 2 3 info list duration 10 country US duration 20 c
  • 是否可以在 pdf 中向使用 R knit::kable 生成的表格添加垂直线?

    我想制作一张桌子knitr kable边界上和某些列之间有垂直线 有办法做到吗 我的输出文档是pdf Thanks 不太清楚 但也许这可以帮助 library knitr library kableExtra library dplyr d
  • 如何关闭笔记本中的初始化单元?

    在我的笔记本中 我有一个相当大的初始化单元 如何使其可关闭 我的意思是我怎样才能将这个单元格卷成一行并能够将其展开呢 经典的解决方案是将初始化单元放入其自己的部分 Alt 4 标题为 初始化 此部分位于笔记本的开头或结尾 要隐藏内容 请关闭
  • JDialog 让主应用程序失去焦点

    我想知道为什么我的 JDialog 将我的主应用程序推入后台 这意味着 如果显示 JDialog 并且用户单击 确定 或 取消 则主应用程序将失去焦点并将被推入后台 经过调查 我发现 只有当我在显示 JDialog 时禁用主框架时 才会发生
  • 我的 Apache CXF 客户端出现问题

    我正在尝试编写一个 Apache CXF JAX WS 客户端 我的依赖项pom xml are
  • 如何禁用 html5 canvas 元素的选择

    我监听 html5 画布内的点击事件 它工作得很好 但是 当我单击图像上的任意位置时 浏览器会突出显示该图像 就好像它已被选中一样 类似于在页面上单击时图像可能会突出显示的方式 我很好奇是否有人知道如何禁用选择 html 元素 例如画布 我
  • 在多个转换中保持键控状态

    我有一个流 我想使用某个键对其进行分区 然后运行多个转换 每个转换使用一个状态 当我打电话时keyBy 我得到一个KeyedStream下一个转换可以正确访问分区状态 但之后链接的另一个转换在尝试访问分区状态时会出现异常 例外的是 状态密钥
  • 如何针对集合调用 Expression>

    我有一个从存储库模式定义存储库的接口 interface IRepository List
  • dplyr 根据向量中的名称改变多列

    我想使用以下方法将两列相乘dplyr s mutate功能 但是我不想为每个变异条件编写一个新行 而是想使用存储在向量中的列的名称var1 and var2 例如 最后我想在现有的bankdata与名字result1其中包含现金列和贷款列相
  • Flash Builder 4.6 - 代码隐藏方法

    我正在尝试找出使用 Flash 构建器用于移动应用程序的 代码隐藏 的正确方法 我正在创建一个 Flex 移动 AIR 项目 基于 选项卡式视图 模板 将我的 UI 设置为设计模式 现在我希望所有逻辑都位于一个单独的类中 该类将相应地改变
  • 我可以假设 C stdlib 函数不使用 errno 吗?

    我正在看一段 C 代码 它的意思是 void printerror char message printf There was an error s n message switch errno do stuff depending on
  • 使用 SolrJ 和 Solr4 进行分面

    我已经浏览过该网站上的相关问题 但尚未找到相关的解决方案 使用以下形式的 HTTP 请求查询我的 Solr4 索引时 facet true facet field country 响应包含所有不同的国家以及每个国家的计数 如何使用 Solr
  • 调试期间未命断点

    为什么 NetBeans Android 1 5 中的断点无法触发 你有一个叫做在其他 IDE 中开发 http developer android com guide developing other ide html它告诉你如何在 ec
  • 在 Linux 上哪里安装 GlassFish?

    免责声明 我对 Linux 还比较陌生 我争论过将其放在 SuperUser 或 ServerFault 上 因为答案does需要将 Linux 作为一个系统进行解释 而不是特定的编程问题 但是我从 Java 开发人员的角度对此感兴趣 并且
  • 如何在 Node.js 中设置 http.createClient 的超时?

    有一个帖子 如何在node js中设置客户端http连接的超时 https stackoverflow com questions 3586760 how do i set a timeout for client http connect
  • 如何获取组中对象的画布相对位置?

    通常一个对象相对于画布的位置可以从它的 left and top属性 但如果对象位于选择 组中 则这些属性将与组相关 有没有办法获得它们相对于画布的位置 当对象位于组内时 其相对于画布的坐标将取决于组的原点 以及对象的原点 假设我们有这段代