加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

canvas绘制文本内容自动换行的实现代码

发布时间:2020-05-11 09:39:57 所属栏目:编程 来源:站长网
导读:要求建造一个约请卡页面,个中问题字数是动态的,最多可表现2行,假如超出2行则第2行内容末了添加省略号。按照产物妹子的性格,四行这个配置到时很大机遇改,以是这里必然不能写死,功效前几灵活的要求改成了最多可表现4行 ,其他仍是。产物妹子too young

要求建造一个约请卡页面,个中问题字数是动态的,最多可表现2行,假如超出2行则第2行内容末了添加省略号。按照产物妹子的性格,四行这个配置到时很大机遇改,以是这里必然不能写死,功效前几灵活的要求改成了最多可表现4行 ,其他仍是。产物妹子too young :)!

空话不说,下面贴代码,献丑了!上代码之前先看一下必要传的参数!!

图文并茂的参数声名,包涵我捉急的PS技能和计划

ctx: 画布的上下文情形

content: 必要绘制的文本内容

drawX: 绘制文本的x坐标

drawY: 绘制文本的y坐标

lineHeight:文本之间的行高

lineMaxWidth:每行文本的最大宽度

lineNum:最多绘制的行数

// 笔墨自动换行 function textPrewrap(ctx, content, drawX, drawY, lineHeight, lineMaxWidth, lineNum) { var drawTxt = ''; // 当前绘制的内容 var drawLine = 1; // 第几行开始绘制 var drawIndex = 0; // 当前绘制内容的索引 // 判定内容是否可以一行绘制完毕 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; // 记录当前行最后一个字符串的下一个idnex,用于绘制下行第一个字 drawLine += 1; // 行数+1 drawY += lineHeight; // 绘制内容的y坐标对应增进行高 drawTxt = ''; // 重置绘制的内容 } } } } }

不测发明

在绘制笔墨的进程中发明,绘制笔墨的y坐标是不是以笔墨上方做尺度,一图胜多言,上图!

赏识器情形: chrome 71.0.3578.98(正式版本)(64 位)

字体巨细为40px

绘制的y坐标为0时,可以看到文本再左上角只漏了一点点出来

绘制的y坐标为40时,可以看到文本可以完全表现

跋文

这是一个较量冷门的代码结果,可是也但愿可以帮到有必要的伴侣,也但愿各人多多支持剧本之家。

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读