佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > canvas繪制文本內(nèi)容自動換行的實現(xiàn)代碼

canvas繪制文本內(nèi)容自動換行的實現(xiàn)代碼

熱門標(biāo)簽:美圖手機(jī) 檢查注冊表項 百度競價點擊價格的計算公式 網(wǎng)站建設(shè) 使用U盤裝系統(tǒng) 智能手機(jī) 硅谷的囚徒呼叫中心 阿里云

原型要求:

要求制作一個邀請卡頁面,其中標(biāo)題字?jǐn)?shù)是動態(tài)的,最多可顯示2行,如果超出2行則第2行內(nèi)容結(jié)尾添加省略號。根據(jù)產(chǎn)品妹子的性格,四行這個設(shè)置到時很大機(jī)會改,所以這里一定不能寫死,結(jié)果前幾天真的要求改成了最多可顯示4行 ,其他照舊。產(chǎn)品妹子too young :)!

廢話不說,下面貼代碼,獻(xiàn)丑了!上代碼之前先看一下需要傳的參數(shù)??!

圖文并茂的參數(shù)說明,原諒我捉急的PS技術(shù)和設(shè)計

  • ctx: 畫布的上下文環(huán)境
  • content: 需要繪制的文本內(nèi)容
  • drawX: 繪制文本的x坐標(biāo)
  • drawY: 繪制文本的y坐標(biāo)
  • lineHeight:文本之間的行高
  • lineMaxWidth:每行文本的最大寬度
  • lineNum:最多繪制的行數(shù)
// 文字自動換行
function textPrewrap(ctx, content, drawX, drawY, lineHeight, lineMaxWidth, lineNum) {
    var drawTxt = ''; // 當(dāng)前繪制的內(nèi)容
    var drawLine = 1; // 第幾行開始繪制
    var drawIndex = 0; // 當(dāng)前繪制內(nèi)容的索引

    // 判斷內(nèi)容是否可以一行繪制完畢
    if(ctx.measureText(content).width <= lineMaxWidth) {
        ctx.fillText(content.substring(drawIndex, i), drawX, drawY);
    } else {
        for (var i = 0; i <= content.length; i++) {
            drawTxt += content[i];
            if (ctx.measureText(drawTxt).width > lineMaxWidth) {
                if (drawLine === lineNum) {
                    // 最后一行添加省略號
                    ctx.fillText(content.substring(drawIndex, i) + '...', drawX, drawY);
                    break;
                } else {
                    // 不是最后一行的情況
                    ctx.fillText(content.substring(drawIndex, i + 1), drawX, drawY);
                    drawIndex = i + 1;  // 記錄當(dāng)前行最后一個字符串的下一個idnex,用于繪制下行第一個字
                    drawLine += 1;  // 行數(shù)+1
                    drawY += lineHeight; // 繪制內(nèi)容的y坐標(biāo)對應(yīng)增加行高
                    drawTxt = ''; // 重置繪制的內(nèi)容
                }
            }
        }
    }
}

意外發(fā)現(xiàn)

在繪制文字的過程中發(fā)現(xiàn),繪制文字的y坐標(biāo)是不是以文字上方做標(biāo)準(zhǔn),一圖勝多言,上圖!

瀏覽器環(huán)境: chrome 71.0.3578.98(正式版本)(64 位)

字體大小為40px

繪制的y坐標(biāo)為0時,可以看到文本再左上角只漏了一點點出來

繪制的y坐標(biāo)為40時,可以看到文本可以完全顯示

后記

這是一個比較冷門的代碼效果,但是也希望可以幫到有需要的朋友,也希望大家多多支持腳本之家。

標(biāo)簽:通遼 山南 賀州 懷化 黃山 煙臺 湘潭 湖北

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《canvas繪制文本內(nèi)容自動換行的實現(xiàn)代碼》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    建阳市| 阿克陶县| 秭归县| 当阳市| 福州市| 南汇区| 鄂温| 珠海市| 钟祥市| 卢龙县| 新密市| 扎兰屯市| 罗源县| 南康市| 平顶山市| 麦盖提县| 静宁县| 平谷区| 延边| 玉门市| 嘉峪关市| 拉萨市| 大邑县| 新余市| 柏乡县| 伊吾县| 乐至县| 洛宁县| 诏安县| 舟曲县| 康马县| 三台县| 大安市| 遂宁市| 孝昌县| 延长县| 西乌珠穆沁旗| 井冈山市| 栾川县| 峡江县| 密山市|