本文引见怎样处置惩罚canvas画图过程当中,drawText的换行题目,先看一个人人日常平凡在canvas绘制文本都邑碰到的题目:
一个150*100的canvas画布,加个边框显著边境
<canvas id="canvas" style="border:solid 1px darkgoldenrod;" width="200px" height="100px"></canvas>
我们先来看fillText()要领,strokeText()要领同理
var c=document.getElementById("canvas"); var ctx=c.getContext("2d"); ctx.fillStyle="#E992B9"; ctx.lineWidth=1; var str = "假如生活欺骗了你,请不要伤心!thank you!" ctx.fillText(str,0,20);
能够看到fillText()在固宽的canvas中,字数过量的时刻,并不会自动换行,我们能够增添canvas自身的宽度,但这不是处置惩罚题目的基础要领。还记得之前引见canvas基础api的时刻,有一个函数,context.measureText(text)
这个函数能够丈量字体的宽高度,那就好办了,我们盘算好我们字符串的长度加上一个也许的宽度,基础上能够处置惩罚这类换行的题目了。
下面看细致完成要领:
var c=document.getElementById("canvas"); var ctx=c.getContext("2d"); ctx.fillStyle="#E992B9"; ctx.lineWidth=1; var str = "假如生活欺骗了你,请不要伤心!thank you!" var lineWidth = 0; var canvasWidth = c.width;//盘算canvas的宽度 var initHeight=15;//绘制字体间隔canvas顶部初始的高度 var lastSubStrIndex= 0; //每次最先截取的字符串的索引 for(let i=0;i<str.length;i++){ lineWidth+=ctx.measureText(str[i]).width; if(lineWidth>canvasWidth){ ctx.fillText(str.substring(lastSubStrIndex,i),0,initHeight);//绘制截取部份 initHeight+=20;//20为字体的高度 lineWidth=0; lastSubStrIndex=i; } if(i==str.length-1){//绘制盈余部份 ctx.fillText(str.substring(lastSubStrIndex,i+1),0,initHeight); } }
见效果图:
算法:盘算字符串str内里每一个字符的宽度的和lineWidth,假如大于canvas的宽度,就截取这部份举行绘制,然后重置lineWidth,保留最先截取的末了的索引,当轮回变量i为末了一个字符的时刻,直接绘制盈余部份。
接下来:我们封装成一个要领,轻易今后直接挪用:
/* str:要绘制的字符串 canvas:canvas对象 initX:绘制字符串肇端x坐标 initY:绘制字符串肇端y坐标 lineHeight:字行高,本身定义个值即可 */ function canvasTextAutoLine(str,canvas,initX,initY,lineHeight){ var ctx = canvas.getContext("2d"); var lineWidth = 0; var canvasWidth = c.width; var lastSubStrIndex= 0; for(let i=0;i<str.length;i++){ lineWidth+=ctx.measureText(str[i]).width; if(lineWidth>canvasWidth-initX){//减去initX,防备边境涌现的题目 ctx.fillText(str.substring(lastSubStrIndex,i),initX,initY); initY+=lineHeight; lineWidth=0; lastSubStrIndex=i; } if(i==str.length-1){ ctx.fillText(str.substring(lastSubStrIndex,i+1),initX,initY); } } }
以上就是本文的全部内容,愿望对人人的进修有所协助!
以上就是html5 canvas的绘制文本自动换行的示例代码的细致内容,更多请关注ki4网别的相干文章!