Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
日常工作中,經(jīng)常需要在原有的Word文檔基礎(chǔ)上,將指定內(nèi)容抹去,變成供填充內(nèi)容的下劃線,如下,將下圖中的以下所有<>及其包含的內(nèi)容替換成下劃線;
續(xù)創(chuàng)作,加速成長!這是我參與「掘金日新計(jì)劃 · 6 月更文挑戰(zhàn)」的第20天,點(diǎn)擊查看活動(dòng)詳情
點(diǎn)贊 + 關(guān)注 + 收藏 = 學(xué)會(huì)了
在 HTML 也好,Word 也好,基本都有下劃線和刪除線(中劃線)。
Fabric.js 作為一個(gè)老牌 canvas 庫,當(dāng)然也提供中劃線和下劃線的配置啦,除此之外還提供了上劃線的配置。
本文要講解的就是這3種裝飾線在 fabric.js 中的使用方法。除了初始化配置外,還支持項(xiàng)目運(yùn)行時(shí),讓用戶動(dòng)態(tài)配置。
本文案例使用了 IText ,該組件支持編輯功能。
這是上劃線、中劃線和下劃線的文檔:
<canvas id="c" width="300" height="300" style="border: 1px solid #ccc"></canvas>
<script src="../../script/fabric.5.2.1.js"></script>
<script>
const canvas = new fabric.Canvas('c')
const iText = new fabric.IText('aaa',{
styles: {
0: {
0: { overline: true }, // 上劃線
1: { linethrough: true }, // 中劃線
2: { underline: true } // 下劃線
}
}
})
canvas.add(iText)
</script>
本例只有3個(gè)字母 a ,而且都在同一行。
styles 第一個(gè)元素的 key 為 0 的意思是第一行,行號(hào)下標(biāo)從0開始。
大概這個(gè)意思
styles: {
0: { // 第1行
0:, // 第1行 第1個(gè)字
1:, // 第1行 第2個(gè)字
2: // 第1行 第3個(gè)字
}
}
如果需要換行,那就要根據(jù)行號(hào)來定義了。換行的方法是文本內(nèi)容里使用 \n 做換行。
除了在初始化時(shí)可以設(shè)置裝飾線外,F(xiàn)abric.js 也提供了在運(yùn)行時(shí)用戶手動(dòng)設(shè)置。不過代碼會(huì)稍微復(fù)雜一點(diǎn)。
其實(shí)動(dòng)態(tài)設(shè)置上劃線、中劃線和下劃線的操作都是一樣的,唯一要變的就是屬性名。
我以中劃線為例,之后上劃線和下劃線只需改個(gè)屬性名。
<button onclick="linethrough()">中劃線</button>
<canvas id="c" width="300" height="300" style="border: 1px solid #ccc"></canvas>
<canvas id="c" width="300" height="300" style="border: 1px solid #ccc"></canvas>
<!-- 引入fabric -->
<script src="../../script/fabric.5.2.1.js"></script>
<script>
const canvas = new fabric.Canvas('c') // 初始化畫布
const iText = new fabric.IText('hello wor\nld') // 創(chuàng)建文字
canvas.add(iText)
function linethrough() {
let activeTxt = canvas.getActiveObject() // 獲取當(dāng)前選中的文字
// 如果當(dāng)前沒選中文字,那什么都不操作
if (!activeTxt) return
// 判斷當(dāng)前是否進(jìn)入編輯狀態(tài)
if (activeTxt.isEditing) {
// 編輯狀態(tài)
const state = activeTxt.getSelectionStyles().find(item => item.linethrough !== true)
// 如果當(dāng)前
if (!state || (JSON.stringify(state) === '{}' && activeTxt['linethrough'] === true)) {
// 如果當(dāng)前已經(jīng)設(shè)置了中劃線,那就把全局中劃線取消
activeTxt.setSelectionStyles({ 'linethrough': false })
} else {
// 如果當(dāng)前沒設(shè)置中劃線,那就添加上中劃線
activeTxt.setSelectionStyles({ 'linethrough': true })
}
} else {
// 選擇狀態(tài)
if (activeTxt['linethrough'] === true) {
activeTxt.linethrough = false
activeTxt.dirty = true;
let s = activeTxt.styles
for(let i in s) {
for (let j in s[i]) {
s[i][j].linethrough = false
}
}
} else {
activeTxt.linethrough = true
activeTxt.dirty = true;
let s = activeTxt.styles
for(let i in s) {
for (let j in s[i]) {
s[i][j].linethrough = true
}
}
}
}
canvas.renderAll()
}
</script>
上面的代碼主要做這幾步操作:
最主要的操作邏輯寫在 linethrough 方法里了。
linethrough 的邏輯如下
?IText 動(dòng)態(tài)設(shè)置裝飾線
https://gitee.com/k21vin/fabricjs-demo/blob/master/tutorial/IText/styles04decoration.html
合一些常用的實(shí)用導(dǎo)航菜單效果展示給小伙伴們,希望對(duì)大家有幫助!
每個(gè)導(dǎo)航文字下面的下劃線會(huì)隨著鼠標(biāo)的移上由左到右緩慢的過渡
實(shí)現(xiàn)該效果的方法如下
首先是html布局:
css樣式:
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。