fabricjs 围绕对象中心点旋转

fabricjs 围绕对象中心点旋转先吐槽一下现在网上搜索的东西 莆田货先不说 牛鬼蛇神 各显神通 要么是千篇一律 答非所问 要么是无人善后的半吊子回答 再要么是上个世纪的古董玩意儿 这样让我们这些面向百度编程的人很难办啊 围绕左上角旋转通过设置属性的方法 object set angle angle 是围绕左上角进行旋转的 但是通过控制点旋转是围绕对象中心点旋转的 那人家就是要通过 js 控制对象中心旋转怎么办嘛 围绕中心点旋转网上有个稍微正常的回答 设置对象 originX oringY 属性为 center 可以是可以设

先吐槽一下现在网上搜索的东西,莆田货先不说,牛鬼蛇神,各显神通,要么是千篇一律、答非所问,要么是无人善后的半吊子回答,再要么是上个世纪的古董玩意儿,这样让我们这些面向百度编程的人很难办啊!

围绕左上角旋转

通过设置属性的方法 object.set("angle", angle) 是围绕左上角进行旋转的,但是通过控制点旋转是围绕对象中心点旋转的,那人家就是要通过 js 控制对象中心旋转怎么办嘛?

围绕中心点旋转

网上有个稍微正常的回答:设置对象 originXoringY 属性为 center,可以是可以设置中心旋转,但对齐点会改变,对象位置会发生偏移,这时候就要重新计算 lefttop 属性值,然后旋转,然后再把对齐点设置回去,最后再计算一次坐标。这里已经看不下去了,这么麻烦的话我还用库干啥,直接罗本用原生 canvas 计算不香吗?然而我不相信 fabricjs 连这种简单的方法都没有,这时还得偷窥源码,然后在 object.class.js 中发现了一处代码片段:

/ * Sets "angle" of an instance with centered rotation * @param {Number} angle Angle value (in degrees) * @return {fabric.Object} thisArg * @chainable */ rotate: function(angle) { 
    var shouldCenterOrigin = (this.originX !== 'center' || this.originY !== 'center') && this.centeredRotation; if (shouldCenterOrigin) { 
    this._setOriginToCenter(); } this.set('angle', angle); if (shouldCenterOrigin) { 
    this._resetOrigin(); } return this; }, 

原来 fabric 已经替我们偷偷地做好了啊,看来是这个问题太弱智了,以致于根本不屑于回答。但对于本 Ctrl CV 工程师来说就只有四个字:拿来把你:

/ * 控制选中对象围绕中心点旋转 * @param {Number} angle * @returns */ rotate(angle) { 
    if (!this.canvas.getActiveObject()) return; let activeObject = this.canvas.getActiveObject(); activeObject.rotate(angle); this.canvas.requestRenderAll(); } 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/199610.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月20日 下午12:37
下一篇 2026年3月20日 下午12:37


相关推荐

  • java三元运算符_java三元运算符详解

    java三元运算符_java三元运算符详解最近在带领实习生中遇到很多新手问与三元运算符有关的 java 题目 多数为代码结果题 少数为应用题 鉴于很多资料上对于 java 三元运算的讲解过于简单 网上的资料与题目也不是很完善 对于结果答案分析不一 故在此总结 当然仅为个人观点 水平有限 不足之处 还请大家多多指出 互相交流学习 什么是 java 三元运算符呢 无疑其操作元有三个 第一个是条件表达式 剩余两个为值 条件表达式为真时运算取第一个值 为假时

    2026年3月26日
    2
  • 全概率公式和贝叶斯公式分别用于什么场合_贝叶斯公式的例题

    全概率公式和贝叶斯公式分别用于什么场合_贝叶斯公式的例题1.全概率公式:首先建立一个完备事件组的思想,其实全概就是已知第一阶段求第二阶段,比如第一阶段分A、B、C三种,然后A、B、C中均有D发生的概率,最后让你求D的概率P(D)=P(A)*P(D|A)+P(B)*P(D|B)+P(C)*P(D|C)2.贝叶斯公式:其实原本应该叫逆概公式,为了纪念贝叶斯这样取名而已.在全概公式理解的基础上,贝叶斯其实就是已知第二阶段反推第一阶段,这时候关键是

    2025年7月11日
    3
  • map集合根据value找key(一个key或多个key)

    map集合根据value找key(一个key或多个key)//根据value值获取到对应的一个key值publicstaticStringgetKey(HashMap<String,String>map,Stringvalue){Stringkey=null;//Map,HashMap并没有实现Iteratable接口.不能用于增强for循环.for(Str…

    2022年7月23日
    9
  • NSGA2算法MATLAB

    NSGA2算法MATLABNSGA2算法MATLAB实现(能够自定义优化函数)以前写了一个简单的NSGA2的算法能够用在ZDT1函数上:http://www.omegaxyz.com/2017/05/04/nsga2matlabzdt1/那个NSGA2的算法不具有普遍性,下面参考课国外的课题小组的代码重新修改了内部冗余内容,使之能够自定义优化函数。更多内容访问omegaxyz.comNSGA2的过程为:

    2022年5月12日
    42
  • HTML空格标记_html换行标记

    HTML空格标记_html换行标记HTML6种空格标记HTML提供了5种空格实体(spaceentity),它们拥有不同的宽度,非断行空格( )是常规空格的宽度,可运行于所有主流浏览器。其他几种空格(   ‌‍)在不同浏览器中宽度各异。 它叫不换行空格,全称No-BreakSpace,它是最常见和我们使用最多的空格,大多数的人可能只接触了 ,它是按下space键产生的空格。在HTM

    2026年4月15日
    2
  • C++ CString转int int转CString「建议收藏」

    1.CString转int    CStringstrtemp="100";  int intResult;  intResult=atoi(strtemp);  —————————————————————–   2int转CString     CStringstr…

    2022年4月6日
    244

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号