Fabric.js 元素中心缩放

news2025/7/10 5:21:46

本文简介

点赞 + 关注 + 收藏 = 学会了


使用 fabric.js 创建的图形,默认的缩放原点是元素操作点的对角点。

如下图所示:

file


如果按住 alt 键 操作会把原点移动到元素中心。

如下图所示:

file


如果想将默认缩放操作设置为“中心缩放”,只需将 centeredScaling 属性设置为 true 即可。



设置中心缩放

虽然只要将 ``centeredScaling 设置为 true 就行了,但还能再细分成2种情况。

一个是全局设置,一个是只设置指定元素。

在实际操作之前,我先创建画布,并在画布上添加2个元素,一个矩形,一个圆形。

file

<canvas id="canvasBox" width="600" height="400" style="border: 1px solid #ccc;"></canvas>

<script>
  // 初始化画布
  let canvas = new fabric.Canvas('canvasBox')

  // 矩形元素
  let rect = new fabric.Rect({
    width: 100,
    height: 60,
    left: 100,
    top: 100,
    fill: 'pink'
  })

  // 将矩形添加到画布里
  canvas.add(rect) 

  // 圆形元素
  let circle = new fabric.Circle({
    radius: 50,
    left: 300,
    top: 80,
    fill: 'green'
  })

  // 将圆形添加到画布里
  canvas.add(circle)
</script>

全局设置

全局设置的话,画布上所有元素都会生效。

只需在创建画布时将 centeredScaling 设为 true 即可。

file

// 省略部分代码.

// 方式1
let canvas = new fabric.Canvas('canvasBox', {
  centeredScaling: true // 全局所有元素都生效
})


// 方式2
let canvas = new fabric.Canvas('canvasBox')
canvas.centeredScaling = true

从上图中可以看到,不管是圆形还是矩形都是以中心点为缩放原点。因为在 new fabric.Canvas 时或者其返回的实例对象上设置 centeredScaling 都是全局生效的。


单独设置指定元素

如果只是设置指定元素以中心点为缩放原点,那么被设置的元素会生效,其他元素不会生效。

本例只将矩形设置成以中心点为缩放原点,圆形还是默认的操作。

file

// 省略部分代码

// 矩形
let rect = new fabric.Rect({
  width: 100,
  height: 60,
  left: 100,
  top: 100,
  fill: 'pink',
  centeredScaling: true // 单个元素生效
})

// 将矩形添加到画布里
canvas.add(rect)

上面的代码只设置了矩形的 centeredScaling ,圆形还是默认值。

所以在操作矩形缩放时是以中心点为原点,圆形还是默认值。


同样,也支持在创建元素后再设置。

// 省略部分代码

let rect = new fabric.Rect({...})

rect.centeredScaling = true


代码仓库

⭐ Fabric.js 中心缩放



推荐阅读

👍《Fabric.js 从入门到 _ _ _ _ _ _》

👍《Fabric.js IText 手动设置斜体》

👍《Fabric.js 动态设置字号大小》

👍《Fabric.js 锁定背景图,不受缩放和拖拽的影响》

👍《Fabric.js 自由绘制椭圆》

👍《Fabric.js 橡皮擦的用法(包含恢复功能)》


点赞 + 关注 + 收藏 = 学会了 代码仓库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/108995.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ImportError: DLL load failed while importing etree: 找不到指定的模块。

目录标题前言错误描述报错代码如下&#xff1a;原因&#xff1a;解决办法前言 今天我正在悠闲的逛着网站寻找今天要爬取的目标当我找到目标的时候正要创建我的scrapy爬虫文件的时候竟然报错了我很惊讶&#x1f62e;&#x1f62e;&#x1f62e;&#xff01;&#xff01;&#x…

安全分析模型核心服务部署

安全分析模型核心服务部署 ModelOps 对所有的人工智能 模型&#xff08;图形模型、语言模型、基于规则的模型&#xff09;以及决策模型的整个生命周期 进行管理&#xff0c;确保对生产中的所有模型进行独立验证和问责&#xff0c;其核心功能涵盖了模型存储、模型测试、模型回滚…

非零基础自学Golang 第15章 Go命令行工具 15.6 性能分析 15.6.1 安装Graphviz

非零基础自学Golang 文章目录非零基础自学Golang第15章 Go命令行工具15.6 性能分析15.6.1 安装Graphviz第15章 Go命令行工具 15.6 性能分析 性能分析和调优是一种强大的技术&#xff0c;用于验证是否满足实际性能要求。 Go语言支持使用go tool pprof工具进行性能查看及调优。…

DNS协议分析

上一篇文章从工作原理角度分析了DNS的作用与意义&#xff0c;这次来看看DNS到底是以什么形式进行通信的。 DNS报文格式如下所示&#xff1a; DNS报文由12字节长的首部和4个长度可变的字段组成。 1.标识&#xff0c;由主机端设置&#xff0c;为的是唯一标识当前DNS报文。 2.1…

关于Docker入门

目录 1.Docker简介 2.Centos7安装Docker 3.Docker HelloWorld运行原理解析 4.阿里云镜像仓库 5.Docker命令 Docker基本命令 Docker镜像常用命令 Docker 容器常用命令 1.Docker简介 Docker 是一个开源的应用容器引擎&#xff0c;基于 Go 语言 并遵从Apache2.0协议开源 Doc…

Vue3——vuex的使用——axios网络请求的使用

vuex作用&#xff1a;用来集中式管理数据 集中式的应用&#xff0c;当前有四个组件A,B,C,D&#xff0c;假如现在有一个数据x在A里面&#xff0c;现在其他三个组件都要用到x并且好要修改x的时候&#xff0c;有一种方法就要用到全局事件总线&#xff0c;如下图所示 像上面这样不…

用于生成随机曲面的Matlab程序(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 本文在总结、分析现有随机图形生成方法的基础上&#xff0c;结合自由形状的造型技术、自适应神经网络的自适应学习机理&#x…

科研人快速入门LaTex到日常使用,下载安装配置,语法使用说明等

1 前言 Latex是一款开源免费并且应用相当广泛的排版工具&#xff0c;被⼴泛运⽤在各个⾏业&#xff0c;⽐如学术界、出版界。LaTeX 和 Word 相比&#xff0c;LaTeX 入门者更能写出漂亮的文档。它不但能对文字、公式、图片进行精确而复杂的排版&#xff0c;并且还能保证全文各个…

【OpenFeign】【源码+图解】【四】FeignClient实例工具类ReflectiveFeign

【OpenFeign】【源码图解】【三】FeignClient的配置信息 目录5. FeignClient实例工具类ReflectiveFeign5.1 增强Builder属性5.1.1 Capability5.2 创建ReflectiveFeign5. FeignClient实例工具类ReflectiveFeign 上文中调用了targeter.target(this, builder, context, target)&a…

【GO】 K8s 管理系统项目[API部分--Node]

K8s 管理系统项目[API部分–Node] 1. 接口实现 service/dataselector.go type nodeCell corev1.Nodefunc(n nodeCell) GetCreation() time.Time {return n.CreationTimestamp.Time }func(n nodeCell) GetName() string {return n.Name }2. Node功能 service/node.go 2.1 重…

基于Servlet 的Java Web项目的CSRF防御概念

本篇创建一个基本的Jave Web 项目, 使用Servlet提供服务, 使用Filter 处理CSRF防御。 演示环境 Java 1.8.0_211Eclipse 2021-06 (4.20.0)Maven 3.6Servlet 创建与运行 在Eclipse 中创建一个简单的Maven 项目, 项目名为 java-web,如下图: 创建完成的项目目录结构如下: 创…

pre compile header

预编译头文件存在的目的是减少一个项目中不经常改动的文件的编译次数&#xff1b; 打个比方&#xff1a;c标准库&#xff0c;当我们在项目中调用一个c标准库的时候&#xff0c;这个库一般是只读的&#xff0c;所以我们没必要每次编译项目的时候都recompile c标准库&#xff1b…

预约挂号系统技术点详解(二)

一、微服务间服务的调用介绍 1. 需求&#xff08;医院接口远程调用数据字典&#xff09; service-hosp服务调用service-cmn服务 2. 实现步骤 ⑴ 搭建service-client父模块 修改pom文件&#xff0c;添加需要使用的model模块和工具模块依赖&#xff0c;并添加openfeign依赖 …

Python学习笔记-PyQt

记述PyQt的相关基本知识。 一、PyQt概述 PyQt是一个创建GUI应用程序的工具包。它是Python编程语言和Qt库的成功融合。Qt库是最强大的库之一。PyQt是由Phil Thompson 开发。 PyQt实现了一个Python模块集。它有超过300类&#xff0c;将近6000个函数和方法。它是一个多平台的工…

使用 kube-prometheus(release-0.6) 监控 Kubernetes v1.18.20

本文档是使用 kube-prometheus-stack[release-0.6] 来监控 kubernetes1.18.20&#xff0c;具体兼容性可以看这里&#xff1a;https://github.com/prometheus-operator/kube-prometheus/tree/release-0.6#kubernetes-compatibility-matrix 1 概述 1.1 在 k8s 中部署 Prometheus…

SpringBoot任务调度(官方案例)

在线文档项目结构 1.源码克隆&#xff1a;git clone https://github.com/spring-guides/gs-scheduling-tasks.git 2.包含两个项目initial和complete&#xff0c;initial可以根据文档练习完善&#xff0c;complete是完整项目 3.功能描述&#xff1a;构建应用程序&#xff0c;使用…

数据结构 - AVL树 (Adelson-Velsky and Landis Tree)

目录一、前言二、简介三、左旋与右旋四、AVL树的调整1、向AVL树中插入新数据1&#xff09;LL型不平衡&#xff08;右单旋转&#xff09;2&#xff09;RR型不平衡&#xff08;左单旋转&#xff09;3&#xff09;LR型不平衡&#xff08;左右双旋转&#xff09;4&#xff09;RL型不…

爆款短视频是怎样练成的:视频发布技巧,首次公开

剪辑好的优质短视频怎么发布才能成为爆款视频&#xff1f;短视频发布技巧公开 前面几篇我们讨论了短视频定位&#xff0c;怎么写文案脚本&#xff0c;怎么拍摄以及后期剪辑&#xff0c;至此我们一个优质的短视频已经制作完成&#xff0c;今天我们就聊一下下一个环节&#xff1…

Kafka Producer Retries Idempotence 原理

Kafka Producer Retries & Idempotence 原理 由于存在网络瞬时抖动&#xff1b;或者kafka集群短暂的不可用&#xff0c;会导致kafka producer发送消息出现异常&#xff0c;生产者无法将消息推送到topic&#xff0c;在这种情况下&#xff0c;消息丢失的可能性很高。因此kaf…

全排列思路

目录 省流版结论 推导过程 输出结果&#xff08;元素数量为4时&#xff09; 省流版结论 &#xff08;程序来源&#xff1a;排列组合之——全排列&#xff08;c语言&#xff09;_rewrite!的博客-CSDN博客_全排列&#xff09; 一晚上的时间&#xff0c;终于弄懂了。真羡慕计算…