前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Fabric.js 动态设置字号大小 🎄

Fabric.js 动态设置字号大小 🎄

作者头像
德育处主任
发布2022-08-30 16:43:53
5K0
发布2022-08-30 16:43:53
举报
文章被收录于专栏:前端数据可视化

本文使用 Fabric.jsIText 演示。如果你还不懂 Fabric.js ,我墙裂推荐你阅读 《Fabric.js从入门到精通》

一图胜千言,先看看图我们再写作文

分析需求

从上图可以看出以下功能需求:\n\n1. 文本被选中后才能修改字号\n2. 整体修改字号\n3. 修改被选中的几个字的字号,没被选中的不进行修改\n\n

解决思路\n\n1. 获取被选中的文字:canvas.getActiveObject() 。\n2. 是否只选中一部分文字:\n 1. 我通过编辑状态来判断是否只选中一部分文字:isEditing 。\n 2. 修改被选中文字的样式:setSelectionStyles({...}) 。\n3. 修改 fontSize 属性。\n4. 如果是全文修改,还要判断是否有些字符在自身设置了 fontSize ,如果文字自己设置了 fontSize ,那全文设置的权重没独立设置的那么高。\n\n

编码html\n<input type="range" min="5" max="150" value="40" id="size" onchange="changeSize(value)">\n<canvas id="c" width="300" height="300" style="border: 1px solid #ccc"></canvas>\n\n<script src="https://cdn.bootcdn.net/ajax/libs/fabric.js/521/fabric.js"></script>\n<script>\n const canvas = new fabric.Canvas(&#39;c&#39;)\n\n const iText = new fabric.IText(&#39;hello world&#39;)\n\n canvas.add(iText)\n\n function changeSize(value) {\n let activeTxt = canvas.getActiveObject()\n\n if (!activeTxt) return\n\n if (activeTxt.isEditing) {\n // 编辑状态\n activeTxt.setSelectionStyles({ &#39;fontSize&#39;: value})\n } else {\n activeTxt.fontSize = value\n let s = activeTxt.styles\n \n // 遍历行和列\n for(let i in s) {\n for (let j in s[i]) {\n s[i][j].fontSize = value // 针对每个字设置字号\n }\n }\n activeTxt.dirty = true\n }\n\n canvas.renderAll()\n }\n</script>\n使用 isEditing 判断当前是否进入编辑状态,我是根据编辑状态下是否有选中文字来修改字号大小的。\n\n最后有2层循环:\n\njs\nfor(let i in s) {\n for (let j in s[i]) {\n s[i][j].fontSize = value\n }\n}\n\n\n第一层循环 i 是行数的遍历;第二层循环 j 是当前行的文字的遍历。\n\n这么做是因为如果只使用 setSelectionStyles 设置字号大小是无法覆盖每个字本身被设置的 fontSize 。所以还是需要循环一遍,保证每个字都修改到位。

设置字号大小的例子还可以用在上标下标里,比如 《Fabric.js 上标和下标的使用偏方》 一文中的用法。上标和小标适应用在合在数学公式和化学符号等场景。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-06-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档