Fabric.js 文本自动换行的实现方式

news2025/2/1 22:48:25

本文简介

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


fabric.js 提供的文本组件中,默认状态是不会自动换行。如果你的使用场景中需要自动文本自动换行,可以使用 Textbox ,并将 splitByGrapheme 设置为 true 即可。



文本自动换行

如果需要实现本文自动换行的效果,可以使用 Textbox

我建议是在初始化时设置好 Textbox 的宽度,然后再将 splitByGrapheme 设置为 true


推荐操作

file

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

<script>
  // 创建画布
  let canvas = new fabric.Canvas('canvasBox')

  let textbox = new fabric.Textbox('雷猴',{
    width: 200,
    left: 20,
    top: 20,
    splitByGrapheme: true, // 自动换行
  })

  // 将文本添加到画布中
  canvas.add(textbox)
</script>

设置好宽度之后,输入文字时就可以根据宽度自动换行。


除了在初始化设置 splitByGrapheme 外,还可以拎出来设置。

// 省略部分代码
let textbox = new fabric.Textbox('雷猴', {...})
textbox.splitByGrapheme = true

没设置宽度的情况

如果没设置宽度,渲染时就会以1个字的宽度为准。

file

// 省略部分代码
let textbox = new fabric.Textbox('雷猴',{
  left: 20,
  top: 20,
  splitByGrapheme: true, // 自动换行
})

在运行时调整

除了初始化 Textbox 时设置宽度外,还可以在运行时让用户调整文本框的宽度,只要 splitByGraphemetrue 时,Textbox 里的文本就会实时根据宽度进行换行。

file


禁止用户调整文本框高度

了解过 fabric.js 的工友都知道,fabric.js 默认是允许用户缩放元素的。

如果 Textbox 元素的在页面上被用户垂直拉伸,里面的文本就会变形。

file


此时我们可以使用 setControlVisible 方法删除垂直缩放的操作点,禁止用户垂直缩放。

// 省略部分代码
textbox.setControlVisible('mt', false)
textbox.setControlVisible('mb', false)

setControlVisible 第一个参数是操作点(控件)的键,分别有 tl, tr, br, bl, ml, mt, mr, mb, mtr

mt 表示中间顶部的操作点,mb 表示中间底部的操作点。

第二个参数设置控件是否可见。true 是默认值,表示可见;设置成 false 代表指定控件不可见。


默认情况

最后回顾一下 Textbox 的默认情况。

在没将 splitByGrapheme 设置为 true 时,横向拉长文本框时,里面的文字不会变形。

但文本框的最小宽度取决于里面最长一行的文本宽度。

file



代码仓库

⭐文本自动换行



推荐阅读

⭐《Fabric.js 从入门到膨胀》

👍《Fabric.js 激活输入框》

👍《Fabric.js 输出精简的JSON》

👍《Fabric.js 缩放画布》

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

⭐《Fabric.js 自定义右键菜单》


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

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

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

相关文章

盘点:保护企业数据安全的10种方法

即便是大型企业也无法防止网络攻击导致的数据泄露&#xff0c;但有多种保护数据安全的方法。 许多公司谨慎处理敏感信息&#xff0c;包括客户个人信息、企业财务记录和账户&#xff0c;以及企业暂时不想泄露的绝密项目&#xff0c;保持数据的安全至关重要。 全球知名企业发生了…

Java(十五)----Stream流

1 Stream流 1.1 Stream流的优势 Java8中有两大最为重要的改变。第一个是 Lambda 表达式&#xff1b;另外一个则是 Stream API。 Stream API ( java.util.stream) 把真正的函数式编程风格引入到Java中。这是目前为止对Java类库最好的补充&#xff0c;因为Stream API可以极大提…

11 深入了解InnoDB引擎

1. Innodb逻辑存储结构 表空间&#xff1a;ibd文件段segment&#xff1a;区extent&#xff1a;一个区大小为1m&#xff0c;里面有64个page页&#xff1b;为了保证页的连续性innodb会一次从磁盘申请4-5个区页page&#xff1a;一个page页大小为默认为16k行row&#xff1a;Trx id、…

深入探究Python上下文管理器

引子 上下文管理器是一种简化代码的有力方式&#xff0c;其内部也蕴含了很多Python的编程思想&#xff0c;今天我们就来探究一下Python的上下文管理器。 大家之前都知道&#xff0c;使用Python打开文件的时候最好要使用with语句&#xff0c;因为这样就算在文件操作中出现了异常…

基于java的校园共享自行车系统的设计与实现/校园共享单车管理系统

摘 要 伴随着社会以及科学技术的发展&#xff0c;互联网已经渗透在人们的身边&#xff0c;网络慢慢的变成了人们的生活必不可少的一部分&#xff0c;紧接着网络飞速的发展&#xff0c;管理系统这一名词已不陌生&#xff0c;越来越多的学校、公司等机构都会定制一款属于自己个…

React扩展:setState、lazyLoad、hook

目录 1.setState的两种写法 ①setState(对象,[callback])②setState(函数,[callback])函数可以接收到stata和props&#xff0c;callback回调函数能获取状态更新后的数据 写了个Demo组件 import React, { Component } from reactexport default class Demo extends Component…

万岳直播电商系统源码代码分析

以小编经验来看&#xff0c;传统商户领域的客流量受地区的限制&#xff0c;往往比较单一、固定&#xff0c;商家需压耗费大量的时间进行打造IP&#xff0c;而电商直播系统的出现则完全打破了这一规则&#xff0c;商家可以通过直播的形式&#xff0c;轻松获取源源不断的客流量&a…

网络中的一些基本概念(总结)

目录 1.IP地址 2.端口号 3.协议 4.五元组 5.协议分层 1.OSI七层模型 2.TCP/IP五层(四层)模型 6.网络分层对应 7.封装 8.分用 9.客户端和服务器 1.IP地址 IP地址是用来定位主机的网络地址,主要用于标识主机和一些其他的网络设备,比如路由器通常是用点分十进制来表示的]…

节律失调:Theta-Gamma耦合精度改变损害老年人的联想记忆

根据著名的神经通信理论&#xff0c;振荡活动的精确协调能够形成联想记忆。我们认为&#xff0c;正常的认知老化会损害神经通信的时间精确性&#xff0c;从而损害联想记忆的形成。我们发现&#xff0c;在年轻人和老年人中都存在高频gamma功率与低频theta相位的耦合支持联想记忆…

地下水监测系统介绍 地下水水位在线监测系统解决方案及应用

平升电子地下水监测系统/地下水水位在线监测系统解决方案由地下水自动监测站监测设备和监测中心平台软件组成。监测设备自动采集、存储地下水水位、水温、水量、水质数据&#xff0c;通过4G/NB-IoT/北斗无线通信网络定时上报至省/市/县级监测中心平台&#xff0c;平台自动接收和…

神奇的 Excel 插件:Azure DevOps 插件

我想离开测试部分,与您分享一个插件,我发现它在我作为业务分析师的商业生活中非常有用。如果您与 Azure DevOps Board 擦肩而过,本文适合您:) 本周,我将与您分享一个我用来跟踪在 Azure DevOps 中完成的工作的插件。 在解释它的安装和使用之前,我想分享一下为什么我需要…

【Lilishop商城】No3-11.模块详细设计,促销模块(优惠券、满减、秒杀、积分)的详细设计

仅涉及后端&#xff0c;全部目录看顶部专栏&#xff0c;代码、文档、接口路径在&#xff1a; 【Lilishop商城】记录一下B2B2C商城系统学习笔记~_清晨敲代码的博客-CSDN博客 全篇会结合业务介绍重点设计逻辑&#xff0c;其中重点包括接口类、业务类&#xff0c;具体的结合源代…

skynet开发一个猜数字游戏

skynet开发一个猜数字游戏游戏简介接口设计和实现agent服务接口room服务接口hall服务接口redis服务gate服务接口编写skynet的config文件游戏演示总结后言游戏简介 猜数字游戏目的是掌握 actor 模型开发思路。 规则&#xff1a; 满三个人开始游戏&#xff0c;游戏开始后不能退…

1.初识Node.js

由于浏览器中有Javascript解析引擎&#xff0c;所以写的javascript可以在浏览器中执行&#xff0c;不同的浏览器有不同的JS解析引擎。由于浏览器内置了DOM,BOM,AJAX这种API&#xff0c;所以JS才能使用他们。 Node.js和浏览器都可以为JS提供运行环境&#xff0c;可以使用Node.j…

【Python机器学习】神经网络中误差反向传播(BP)算法详解及代码示例(图文解释 附源码)

需要全部代码请点赞关注收藏后评论留言私信~~~ 误差反向传播学习算法 用神经网络来完成机器学习任务&#xff0c;先要设计好网络结构S&#xff0c;然后用训练样本去学习网络中的连接系数和阈值系数&#xff0c;即网络参数S&#xff0c;最后才能用来对测试样本进行预测。 在研…

智能驾驶进入新周期:从「定点量产」到「做大做强」

智能驾驶赛道已经进入一个全新的周期。 过去三年时间&#xff0c;中国本土供应商陆续进入乘用车前装量产赛道&#xff0c;部分企业实现了从0到1的量产突围&#xff0c;而一些领跑的本土供应商已率先进入规模化上车的新阶段。 从最初的技术突破、产品落地&#xff0c;到定点量…

干货 | IC模拟版图设计学习笔记,一文教你快速入门

模拟版图设计处于IC设计流程的后端&#xff0c;属于模拟IC设计岗位的一种。随着我国半导体行业的发展&#xff0c;IC模拟版图岗位的人才需求也越来越大。而每个芯片最终能够付诸于生产都离不开集成电路版图设计师的功劳&#xff0c;所以IC模拟版图工程师在芯片产业的发展过程中…

Nginx-反向代理

什么是反向代理 用户直接访问反向代理服务器就可以获得目标服务器的资源。这一过程叫反向代理 如何配置反向代理 修改nginx配置文件 1.切换到nginx的conf路径下操作nginx的配置文件 cd /usr/local/openresty/nginx/conf 1.1防止修改错误可以先备份一下配置文件 cp nginx.…

IO流2.0 缓冲流 序列化 字符打印 printf格式 压缩流

04 缓冲流Buffered 4.1字节缓冲流 4.2 字符缓冲流 newLine();在底层自动识别操作系统类别和换行符 其实就是输出换行符; 4.2.1 BufferedReader&#xff08;字符为单位 尽量用于文本文件&#xff09; 不要去操作 二进制文件[声音&#xff0c;视频 ], 可能造成文件损坏 throw…

三个月转行SLAM,他的心路历程

SLAM入门心路历程 来源&#xff1a;知乎作者—莫慢待 读了三年985的计算机硕士&#xff0c;做了很多项目&#xff0c;发现自己是一个菜鸡。c/object-c/python/java/matlab甚至还写过R&#xff0c;也就是项目需要什么写什么。自学能力算是很不错了&#xff0c;第一次创业自己写…