当前位置:网站首页>Fabric.js IText 手动设置斜体
Fabric.js IText 手动设置斜体
2022-07-02 05:08:00 【德育处主任】
持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第29天,点击查看活动详情
本文简介
点赞 + 关注 + 收藏 = 学会了
<br>
不管是在富文本编辑器还是在Word里,都有“斜体”功能。而 Fabric.js
也不例外。本文主要讲解在 Fabric.js
中使用 IText
创建的文本进行斜体设置。
其中包括:
- 在创建文字时就设置斜体
- 让用户手动设置斜体
<br>
<br>
初始化画布
初始化画布是必须的,之后讲解的内容都会基于这小节的代码进行开发。
<canvas id="c" width="300" height="300" style="border: 1px solid #ccc"></canvas><!-- 引入 fabric.js --><script src="https://cdn.bootcdn.net/ajax/libs/fabric.js/521/fabric.js"></script><script> const canvas = new fabric.Canvas('c') // 创建画布,并绑定元素 const iText = new fabric.IText('hello world') // 创建文本 canvas.add(iText) // 将文本添加进画布中</script>
初始化的代码非常简单,如果你对上面的代码不太理解的话可以先看看 《Fabric.js 从入门到膨胀》
<br>
<br>
创建文本时设置斜体
IText
要设置斜体可以用 italic
或者 oblique
这两个关键字,用哪个都行,本文使用 italic
进行讲解。
// 省略部分代码const iText = new fabric.IText('hello world', { fontStyle: 'italic'})
要在初始化时设置斜体,只需将 fontStyle
设置成 italic
或者 oblique
即可。
<br>
上面的代码是全文进行斜体设置的,如果你只是想设置某个字符,可以使用下面的方法
// 省略部分代码const iText = new fabric.IText('hello world', { styles: { 0: { 1: { fontStyle: 'italic' } } }})
我将 “e” 设置成斜体。
使用 styles
可以逐行逐字进行设置。“e” 位于第1行第2个字符,而计算行和列是从下标0
开始的,所以 “e” 的位置是 0-1
。
<br>
<br>
手动设置斜体
手动设置斜体分2种情况:
- 全文斜体 / 恢复默认
- 被选中的文本进行斜体 / 恢复默认
<br>
为了可以手动设置,我在页面上添加了一个按钮。
操作如图所示
<button onclick="italic()">斜体</button><canvas id="c" width="300" height="300" style="border: 1px solid #ccc"></canvas><!-- 引入 fabric.js --><script src="https://cdn.bootcdn.net/ajax/libs/fabric.js/521/fabric.js"></script><script> const canvas = new fabric.Canvas('c') // 创建画布,并绑定元素 const iText = new fabric.IText('hello world') // 创建文本 canvas.add(iText) // 将文本添加进画布中 function italic() { let activeTxt = canvas.getActiveObject() if (!activeTxt) return if (activeTxt.isEditing) { // 编辑状态,将被选中的文本进行斜体或恢复默认的操作 const state = activeTxt.getSelectionStyles().find(item => item.fontStyle !== 'italic') if (!state || (JSON.stringify(state) === '{}' && activeTxt['fontStyle'] === 'italic')) { activeTxt.setSelectionStyles({ 'fontStyle': 'normal' }) } else { activeTxt.setSelectionStyles({ 'fontStyle': 'italic' }) } } else { // 选择状态,全文进行斜体或恢复默认操作 if (activeTxt['fontStyle'] === 'italic') { activeTxt.fontStyle = 'normal' let s = activeTxt.styles for(let i in s) { for (let j in s[i]) { s[i][j].fontStyle = 'normal' } } } else { activeTxt.fontStyle = 'italic' let s = activeTxt.styles for(let i in s) { for (let j in s[i]) { s[i][j].fontStyle = 'italic' } } } } canvas.renderAll() }</script>
以上代码的思路和步骤是:
- 通过
canvas.getActiveObject()
方法获取当前被选中的对象。 - 如果当前没选中任何文本,就不做操作。
- 通过
isEditing
属性检测文本是否处于编辑状态。 - 编辑状态下,将被选中的文本进行斜体或恢复默认的操作。
- 非编辑状态下,全文进行斜体或恢复默认操作。
<br>
以上就是本文主要想讲解的内容。
<br>
<br>
代码仓库
<br>
<br>
推荐阅读
《Fabric.js 动态设置字号大小》点赞 + 关注 + 收藏 = 学会了
边栏推荐
- VMware installation win10 reports an error: operating system not found
- 7.1模拟赛总结
- 数据库问题汇总
- js中的Map(含leetcode例题)
- Online incremental migration of DM database
- Virtual machine installation deepin system
- 2022-003arts: recursive routine of binary tree
- Set the default style of scroll bar Google browser
- Basic differences between Oracle and MySQL (entry level)
- Summary of MySQL key challenges (2)
猜你喜欢
Application of intelligent robot in agricultural ecology
The El cascader echo only selects the questions that are not displayed
Getting started with pytest ----- confitest Application of PY
数学问题(数论)试除法做质数的判断、分解质因数,筛质数
Future trend of automated testing ----- self healing technology
2022-003arts: recursive routine of binary tree
What data does the main account of Zhengda Meiou 4 pay attention to?
el-cascader回显只选中不显示的问题
Pyechats 1.19 generate a web version of Baidu map
Preparation for writing SAP ui5 applications using typescript
随机推荐
Mouse events in JS
Leetcode basic programming: array
Preparation for writing SAP ui5 applications using typescript
Orthogonal test method and function diagram method for test case design
Win10 disk management compressed volume cannot be started
[high speed bus] Introduction to jesd204b
黑馬筆記---Set系列集合
JS interview collection test question 1
培养中小学生对教育机器人的热爱之心
TypeScript函数详解
Here comes the chicken soup! Keep this quick guide for data analysts
About PROFIBUS: communication backbone network of production plant
Change deepin to Alibaba image source
Basic differences between Oracle and MySQL (entry level)
Implementation of go language for deleting duplicate items in sorting array
Implementation of leetcode two number addition go
Typescript function details
LeetCode 241. Design priorities for operational expressions (divide and conquer / mnemonic recursion / dynamic programming)
LeetCode 241. 为运算表达式设计优先级(分治/记忆化递归/动态规划)
fastText文本分类